Shell-Script用于连接目录中具有两个键列的所有CSV文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell-Script用于连接目录中具有两个键列的所有CSV文件相关的知识,希望对你有一定的参考价值。
我现在已经挣扎了一段时间。
我有一个包含5个以上CSV文件的目录。我们的想法是将它们全部加入脚本(可能带有循环?)。
仅包含两个文件的示例:
填写1
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,但我没有得到它(错误的方法?)。
谢谢您的帮助。
答案
输入文件:
$ 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
以上是关于Shell-Script用于连接目录中具有两个键列的所有CSV文件的主要内容,如果未能解决你的问题,请参考以下文章