附加两个由2个相似列对齐的异构多列文件

时间:2013-12-06 00:20:36

标签: bash unix awk

我有两个文件:

文件1:

car_type, speed, direction, Lat, Lng  
Ford, 40mph, 120, 32.44, -123.25

文件2:

Lat, Lng, airplane_type, #_of_passengers, airline  
36.78,-124.21, Boeing 747, 150, United

我想合并它们来创建一个看起来像这样的文件:

car_type, speed, direction, Lat, Lng, airplane_type, #_of_passengers, airline  
Ford,40mph,120,32.44,-123.25,,,
 ,,,36.78,-124.21,Boeing 747,150,United  

最终结果是一个逗号分隔的文件,在File1条目的末尾始终有3个空列,在File2条目的开头有3个空列。但是,Lat和Lng字段将对齐。

我不想加入类似的值,我想APPEND第一个和第二个文件,以便它共享相同的列而不是行。

Another example  
File 1:
Car_Type, color, speed, lat, lng
Ford, White, 35, 34.567, -123.234
Toyota, Blue,145, 34.657, -123.255
Honda, Black, 25, 35.587, -123.689

File 2:  
Store,lat,lng
Walgreens, 32.123, -123.546
Target, 32.487, -123.594
WalMart, 32.986, -123.165

Result:  
Car_Type, color, speed, lat, lng, Store  
Ford, White, 35, 34.567, -123.234, <NULL>
Toyota, Blue,145, 34.657, -123.255, <NULL>
Honda, Black, 25, 35.587, -123.689, <NULL>
<NULL>, <NULL>, <NULL>, 32.123, -123.546, Walgreens
<NULL>, <NULL>, <NULL>, 32.487, -123.594, Target
<NULL>, <NULL>, <NULL>, 32.986, -123.165, WalMart  

根据列File1 Lat = File2Lat&amp;找到将合并的脚本。 File1 Lng = File2 Lng,以便将这些列指定为对齐。其他不相似的列只是连接在一起。注意:NULL表示只是一个空字段,不需要格式化。

2 个答案:

答案 0 :(得分:0)

你走了:

#!/bin/sh
{
echo 'car_type, speed, direction, Lat, Lng, airplane_type, #_of_passengers, airline'
tail -n +2 file1.txt | sed s/$/,,,/
tail -n +2 file2.txt | sed s/^/,,,/
}

说明:

  • 打印新标题
  • 跳过file1的标题,并将,,,追加到行尾
  • 跳过file2的标题,并将,,,添加到行的开头
  • 3个命令分组在{...}内,因此您可以轻松地将整个内容重定向到文件

答案 1 :(得分:0)

如果您的输入文件包含多行数据,这可能是您想要的,具体取决于您想要输出的内容:

awk '
  NR==FNR { a[FNR]=$0; next }
  FNR==1  { sub(/([^,]+,){2}/,"") }
  { print a[FNR] (FNR==1 ? "," : ",,,\n,,,") $0 }
' file1 file2