我正在处理第一列关联的sort,join和awk 2 csv文件(分号分隔符)。
File1.csv:
TL_01;labelSD1;PFL_11
TL_01;labelSD1;PFL_12
TL_01;labelSD1;PFL_13
TL_02;labelSD3;PFL_04
TL_03;labelSD4;PFL_05
File2.csv:
TL_01;labelRT1;JV_111
TL_02;labelRT3;JV_02
TL_03;labelRT4;JV_03
我想合并这两个文件并将File1.csv
中第三列的多个值连接到一个列中,并使用此模型后跟'#'分隔符:
RightMerge.csv:
TL_01;labelSD1;PFL_11#PFL_12#PFL_13;labelRT1;JV_111
TL_02;labelSD3;PFL_04;labelRT3;JV_02
TL_03;labelSD4;PFL_05;labelRT4;JV_03
实际上,我能够合并2个文件,但不能使用以下命令将多个值与特定字符(#)连接起来(文件已经按第一列排序):
join -11 -21 File1.csv File2.csv -t ';' > FileOut.csv
这给出了以下结果:
FileOut.csv:
TL_01;labelSD1;PFL_11;labelRT1;JV_111
TL_01;labelSD1;PFL_12;labelRT1;JV_111
TL_01;labelSD1;PFL_13;labelRT1;JV_111
TL_02;labelSD3;PFL_04;labelRT3;JV_02
TL_03;labelSD4;PFL_05;labelRT4;JV_03
在此之后,我尝试使用awk
脚本来连接前三行,如下所示:
TL_01;labelSD1;PFL_11#PFL_12#PFL_13;labelRT1;JV_111
但我没有找到解决方法。 我应该继续进行awk治疗还是有另一种方法可以做到这一点?
答案 0 :(得分:0)
$ cat tst.awk
BEGIN { FS=OFS=";" }
NR==FNR { key2val[$1] = ($1 in key2val ? key2val[$1] "#" $3 : $0); next }
{ print key2val[$1], $2, $3 }
$ awk -f tst.awk file1 file2
TL_01;labelSD1;PFL_11#PFL_12#PFL_13;labelRT1;JV_111
TL_02;labelSD3;PFL_04;labelRT3;JV_02
TL_03;labelSD4;PFL_05;labelRT4;JV_03
它仅假设您发布的样本输入数据真实代表您的真实数据,例如每个键值都存在于两个文件等中。如果情况并非如此,则编辑您的问题以显示更具真实代表性的样本输入/输出。
答案 1 :(得分:0)
你也可以尝试这个,
cat FileOut.csv |
awk '
BEGIN{
FS=OFS=SUBSEP=";"
}
NF>1{
a[$1,$2,$4,$5] = a[$1,$2,$4,$5]";"$3
}
END{
for(i in a){
split(i,arr,";");
print arr[1]";"arr[2]";"a[i]";"arr[3]";"arr[4]
}
}' |
sort
检查