从匹配的变量bash打印特定的列

时间:2019-03-08 20:30:27

标签: loops awk sed match

我有一个文本文件(txtfile1),其中包含诸如ID,var1,var2和var3之类的信息:

 T01012 20 30 40
 T01025 21 22 22
 T01000 90 94 20
 ...

我还有另一个文本文件(txtfile2),其中包含单独的信息,并且将包含与txtfile1中相同的ID:

 P02013 -999 -999 -999 -999 -999
 S01381 -999 10 -999 -999 11
 T01012 -999 -999 -999 23 12
 ...

在遍历txtfile2中的ID的同时,我想提取txtfile1中的第一,第二和第三列。我尝试了各种awk和sed命令都无济于事,并且缺少一些简单的东西。任何帮助,将不胜感激。提供的示例的预期输出为:

 T1012 20 30

最终将写入文本文件。

2 个答案:

答案 0 :(得分:1)

您可以使用join

join -j1 -o1.1,2.2,2.3 <(sort txtfile2) <(sort txtfile1)
  • -j指定要加入文件的列
  • -o列出要输出的字段

join需要对输入文件进行排序,因此使用进程替换将排序后的文件传递给命令。

答案 1 :(得分:0)

如果不希望排序

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

如果要删除最后一个字段(在所选记录中为40)

$ awk 'NR==FNR{$NF=""; a[$1]=$0; next} $1 in a{print a[$1]}' file1 file2

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