将最后一列添加到另一个文件

时间:2015-11-12 02:47:04

标签: bash shell awk

如果两个文件的第一列匹配,我想在FileA的最后一列添加FileB的第2列。

FILEA

12345,4567,12345,4567
56789,1234,56789,1234
65789,1234,23244,2324

FILEB

12345,MMS
12345,INTERNET
12345,SSS
56789,MS
56789,INTERNET

输出

12345,4567,12345,4567,MMS,INTERNET,SSS
56789,1234,56789,1234,MS,INTERNET
65789,1234,23244,2324

到目前为止,我有这个awk

awk -F, 'NR==FNR{a[$1]=$2;next} {$5=a[$1]}1' OFS=, FileB FileA | tr -d '  '

导致

 12345,4567,12345,4567,SSS
 56789,1234,56789,1234,INTERNET

2 个答案:

答案 0 :(得分:1)

awk -F, 'NR==FNR{a[$1]=$0;next}a[$1]{a[$1]=a[$1]","$2}END{for(i in a)print a[i]}' filea fileb

答案 1 :(得分:0)

你很亲密:

var playBtn = document.getElementById('play');

var playSound = function() {
    audio.play();
};

playBtn.addEventListener('click', playSound, false);
stopBtn.addEventListener('click', function(){audio.pause()}, false);

此方法可确保输出中的行顺序与$ awk -F, 'NR==FNR{a[$1]=a[$1](a[$1]?",":"")$2;next} a[$1]{$5=a[$1]}1' OFS=, FileB FileA 12345,4567,12345,4567,MMS,INTERNET,SSS 56789,1234,56789,1234,MS,INTERNET 65789,1234,23244,2324 中的行顺序相同。

如何运作

  • FileA

    在这种情况下阅读第一个文件NR==FNR{a[$1]=a[$1](a[$1]?",":"")$2;next}时,我们会将FileB附加到$2的值。如果a[$1]已有值,我们会在a[$1]之前添加逗号。

    添加逗号与否的选择是使用三元语句:$2。如果(a[$1]?",":"")为真(非空),则此语句返回a[$1]。如果没有,则返回空字符串","

  • ""

    如果a[$1]{$5=a[$1]}不为空,请将其设为a[$1]

  • $5

    打印行