我想比较file1.txt
和file2.txt
的前两列,如果匹配,则将新列(第3和第4列)添加到file1.txt
,其中的值来自{3}和第4列{1}}和" NA"不匹配。
file2.txt
ch1 100
ch1 200
ch3 100
ch4 200
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命令,但它没有提供所需的输出。
答案 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' });