我试图加入几个文件,如下所示
file1
DATE;BAL_RO,ET-CAP,EXT_EA16;LRW_RT,AY-LME;
2014M01;AZ;PO;
2013M12;WT;UF;
file2
DATE;WALU-TF,TZ-AN;BAL_OP,WZ-CPI,WXZ-JUM;
2014M02;BA;LA;
2014M01;BR;ON;
我试图合并它们以获得以下结果
DATE;WALU-TF,TZ-AN;BAL_OP,WZ-CPI,WXZ-JUM;BAL_RO,ET-CAP,EXT_EA16;LRW_RT,AY-LME;
2014M02;BA;LA;
2014M01;BR;ON;AZ;PO;
2013M12 WT;UF;
或
DATE;WALU-TF,TZ-AN;BAL_OP,WZ-CPI,WXZ-JUM;BAL_RO,ET-CAP,EXT_EA16;LRW_RT,AY-LME;
2014M02;BA;LA;;
2014M01;BR;ON;AZ;PO;
2013M12;;WT;UF;
我尝试了join
,但它说filenameX is not sorted:
如果您有任何想法,欢迎他们。
最佳。
答案 0 :(得分:0)
这对你有用吗?
$ awk '
BEGIN{FS=OFS=";"}
NR==FNR{a[$1]=$0;next}
{$0=($1 in a)?a[$1] $2 FS $3:$0; delete a[$1]}1;END{for(x in a) print a[x]}' file2 file1
DATE;WALU-TF,TZ-AN;BAL_OP,WZ-CPI,WXZ-JUM;BAL_RO,ET-CAP,EXT_EA16;LRW_RT,AY-LME
2014M01;BR;ON;AZ;PO
2013M12;WT;UF;
2014M02;BA;LA;
;
答案 1 :(得分:0)
Bash有这个很棒的功能,可以对两个文件进行内联排序:
$ join -t ';' -a 1 -a 2 -o 0 1.2 1.3 2.2 2.3 <(sort -n file1 ) <(sort -n file2)
DATE;BAL_RO,ET-CAP,EXT_EA16;LRW_RT,AY-LME;WALU-TF,TZ-AN;BAL_OP,WZ-CPI,WXZ-JUM
2013M12;WT;UF;;
2014M01;AZ;PO;BR;ON
2014M02;;;BA;LA
说明:
-t ';'
:使用;
作为输入和输出分隔符。
-a 1 -a 2
:还会从file1和file2打印无法使用的行。
-o 0 1.2 1.3 2.2 2.3
:每一行格式为0
(加入字段),1.2
(file1
的第二个字段),1.3
(第3个字段) file1
),等等。
<(sort -n file1)
:通过bash进程替换进行数字排序file1
。
<(sort -n file2)
:通过bash进程替换进行数字排序file2
。
有关bash流程替换的详细信息,请参阅:http://tldp.org/LDP/abs/html/process-sub.html。