我有一个文本文件(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
最终将写入文本文件。
答案 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