Loops 打印匹配变量bash中的特定列

Loops 打印匹配变量bash中的特定列,loops,awk,sed,match,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 ...

我有一个文本文件(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中的第1、第2和第3列。我尝试过各种awk和sed命令,但都没有成功,我遗漏了一些简单的东西。任何帮助都将不胜感激。所提供示例的预期输出为:

 T1012 20 30

最终会写入一个文本文件

您可以使用
加入

join -j1 -o1.1,2.2,2.3 <(sort txtfile2) <(sort txtfile1)

如果不需要排序,则加入-j1-o1.1,2.2,2.3

$ 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