比较两个列表并打印每个列表中的选择列

时间:2015-10-05 09:29:04

标签: awk

我想比较两个列表并从一个列中打印一些列,如果两个列匹配则从一个列打印一些列。我怀疑我已经关闭,但我认为最好检查..

第一个文件:Data.txt

101    0.123
145    0.119
242    0.4
500    0.88

第二档:Map.txt

red    1    99     
blue    3    101
rob    3    240
ted    7    500

所以,如果我想比较file2的第3列和file1的第1列并打印file2的第1列和file1的全部,我试过awk 'NR==FNR {a[$3];next}$1 in a{print$0}' file2 file1

但只能在file1中打印匹配项。我尝试在awk中添加x=$1。即awk 'NR==FNR {x=$1;a[$3];next}$1 in a{print x $0} file2 file1,但只保存$1的一个值,并在每一行输出该值。我也尝试在a[$3]中添加1美元,这显然是错误的,因此输出为零。

理想情况下,我想获得此输出:

blue    145    0.119
ted    500    0.88

这是file2的第1列和file2的第3列与file1的第1列匹配,以及file1的其余部分。

1 个答案:

答案 0 :(得分:1)

你几乎完全是在你的第二次尝试中。只需将$1的值分配给标量,您就可以将其存储在数组中以供以后使用。

awk 'NR==FNR {a[$3]=$1; next} $1 in a {print a[$1], $0}' file2.txt file1.txt

$ cat file1.txt
101    0.123
145    0.119
242    0.4
500    0.88

$ cat file2.txt
red   1    99
blue  3    101
rob   3    240
ted   7    500

$ awk 'NR==FNR {a[$3]=$1; next} $1 in a {print a[$1], $0}' file2.txt file1.txt
blue 101    0.123
ted 500    0.88