我有两个TSV文件,我尝试使用第二个TSV文件与第一个文件进行比较,看看密钥是否存在;如果是,请将第一个表中的标记为true。例如
文件1:
K1 Va1 Va2 Va3 Va4 Va5
K2 Vb1 Vb2 Vb3 Vb4 Vb5
K3 Vc1 Vc2 Vc3 Vc4 Vc5
文件2:
K1
K3
尝试输出:
K1 Va1 Va2 Va3 Va4 Va5 True
K2 Vb1 Vb2 Vb3 Vb4 Vb5 False
K3 Vc1 Vc2 Vc3 Vc4 Vc5 True
现在,我试图将所有True的第二个文件加入,以便它的K1 - True,K3 - True。然后我尝试将其与第一个文件连接,并用False标记空框。但我觉得这是一种可怕的方式。有没有人对如何解决这个问题有任何建议?
答案 0 :(得分:1)
使用awk
awk 'NR == FNR{a[$0];next};{$NF = $NF OFS ($1 in a? "True": "False"); print}' file2 file1
遍历file2
并将每个密钥存储在数组a
中。接下来,遍历file1
,根据是否在数组True
中找到字段1中的键或不遵循False
或a
来修改最后一列通过打印线。这会产生:
K1 Va1 Va2 Va3 Va4 Va5 True
K2 Vb1 Vb2 Vb3 Vb4 Vb5 False
K3 Vc1 Vc2 Vc3 Vc4 Vc5 True
答案 1 :(得分:0)
awk 'NR==FNR{key[$1];next}$1 in key{printf "%s - True\n",$1}' file2 file1 >tmpfile && mv tmpfile file2
应该这样做。
<强>输出强>
$ cat file2
K1 - True
K3 - True