比较 TSV 文件并标记真/假

  • 本文关键字:TSV 文件 比较 bash shell
  • 更新时间 :
  • 英文 :


我有两个 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 - 真,K3 - 真。然后我尝试将其与第一个文件连接,并使用 False 标记空框。但我觉得这是一种糟糕的方式。有人对如何解决这个问题有任何建议吗?

很容易用awk

解决
awk 'NR == FNR{a[$0];next};{$NF = $NF OFS ($1 in a? "True": "False"); print}' file2 file1

循环访问file2并将每个键存储在数组a中。接下来,循环访问file1 ,通过附加TrueFalse来修改最后一列,具体取决于字段 1 中的键是否在数组中找到 a 然后打印该行。这会产生:

K1 Va1 Va2 Va3 Va4 Va5 True
K2 Vb1 Vb2 Vb3 Vb4 Vb5 False
K3 Vc1 Vc2 Vc3 Vc4 Vc5 True
awk 'NR==FNR{key[$1];next}$1 in key{printf "%s - Truen",$1}' file2 file1 >tmpfile && mv tmpfile file2

应该这样做。

输出

$ cat file2
K1 - True
K3 - True

相关内容

  • 没有找到相关文章

最新更新