比较两个文件中的列并创建新列

时间:2015-07-23 22:32:53

标签: join awk

我想比较file1.txtfile2.txt的前两列,如果匹配,则将新列(第3和第4列)添加到file1.txt,其中的值来自{3}和第4列{1}}和" NA"不匹配。

FILE1.TXT

file2.txt

FILE2.TXT

ch1  100
ch1  200
ch3  100
ch4  200

outputfile.txt

ch1  100  0.5  0.6
ch1  200  0.1  1.2
ch3  400  0.2  0.9
ch4  200  1.0  3.0

我尝试了join / awk命令,但它没有提供所需的输出。

2 个答案:

答案 0 :(得分:1)

join -a1 -1 1 -2 1 -e "NA" -o 1.1,2.2,2.3 \
    <(sed 's/ \+/_/' file1.txt | sort)  <(sed 's/ \+/_/' file2.txt | sort) |
sed 's/_/ /' | column -t

答案 1 :(得分:1)

标准file1.txt技术将整个awk 'FNR == NR { k[$1,$2] = 1; next } { if (k[$1,$2] == 1) { print $0; k[$1,$2] = 2 } } END { for (i in k) { if (k[i] == 1) { sub(SUBSEP, " ", i); print i, "NA", "NA" } } }' \ file1.txt file2.txt 读入内存。如果你的文件太大而不适合,那么就需要付出相当大的努力(但即便如此)。

$0

第一行读取第一个文件并记录读取的键。第二行执行大部分处理。如果第二个文件中$ 1,$ 2的密钥与记录匹配,则打印k,并记录密钥匹配(通过将值从1设置为2)。第三行(END块)查看sub(SUBSEP, " ", i)中的所有键,如果值不是2,则它不匹配,因此键使用两个NA列打印。 i部分将awk中两个键之间的子分隔符固定到空格中。

ch1 100 0.5 0.6 ch1 200 0.1 1.2 ch4 200 1.0 3.0 ch3 100 NA NA 的原始输出:

column -t

通过ch1 100 0.5 0.6 ch1 200 0.1 1.2 ch4 200 1.0 3.0 ch3 100 NA NA (在我的Mac上)后:

FB.login(function (response) {
    // handle the response
    FB.api('/me', function (usrresponse) {
        document.getElementById('inFbStatus').innerHTML = 'Successful login to Facebook';
        console.log(JSON.stringify(usrresponse));
    });
}, { scope: 'email, basic_info' });