我想比较两个列表并从一个列中打印一些列,如果两个列匹配则从一个列打印一些列。我怀疑我已经关闭,但我认为最好检查..
第一个文件: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的其余部分。
答案 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