我现在已经挣扎了一段时间。
我有一个包含5个以上CSV文件的目录。我们的想法是将它们全部加入脚本(可能带有循环?)。
只有两个文件的示例:
File1中
1 ; 1.1 ; xyz
1 ; 1.2 ; abc
2 ; 2.1 ; gfa
文件2
1 ; 1.1 ; dft
1 ; 1.2 ; asd
2 ; 2.1 ; qwe
输出文件应如下所示:
1 ; 1.1 ; xyz ; dft
1 ; 1.2 ; abc ; asd
2 ; 2.1 ; gfa ; qwe
在每个CSV文件中,前两列是“主键”。我已尝试使用join和awk,但我没有得到它(错误的方法?)。
感谢您的帮助。
答案 0 :(得分:0)
输入文件:
$ cat featureA
SW1 ; 1.1 ; xyz
SW1 ; 1.2 ; abc
SW2 ; 2.1 ; gfa
$ cat featureB
SW1 ; 1.1 ; dft
SW1 ; 1.2 ; asd
SW2 ; 2.1 ; qwe
<强>输出:强>
awk 'BEGIN{FS=OFS=";"}{k=$1 OFS $2}FNR==NR{arr[k]=$3;next}k in arr{print k,arr[k],$3}' featureA featureB
SW1 ; 1.1 ; xyz; dft
SW1 ; 1.2 ; abc; asd
SW2 ; 2.1 ; gfa; qwe
要解决
我有一个包含5个以上CSV文件的目录。这个想法就是把 在这个目录中有几个CSV并运行一个脚本来加入它们(也许吧 有一个循环?)。这些文件与交换机有关。
$ awk 'BEGIN{FS=OFS=";"}{k=$1 OFS $2}{arr[k]=(k in arr?arr[k] OFS:"")$3}END{for(i in arr)print i, arr[i]}' feature*
SW1 ; 1.1 ; xyz; dft
SW1 ; 1.2 ; abc; asd
SW2 ; 2.1 ; gfa; qwe
<强>解释强>
awk 'BEGIN{
FS=OFS=";" # i/p and o/p field separators
}
{
k=$1 OFS $2 # variable k used as key,
# field1 o/p field sep and field2
}
FNR==NR{ # read featureA file
arr[k]=$3; # save 3rd field in array arr, with key being variable k
next # go to next
}
k in arr{ # read featureB file, if key exists in array arr
print k,arr[k],$3 # print k, array value, and 3rd field
}
' featureA featureB