Awk 基于另一个文件从文件中提取数据

Awk 基于另一个文件从文件中提取数据,awk,Awk,我有两个文件名为file_a和file_b。我想根据文件a的数据从文件b中提取数据 档案室 1kps_2 1tgs 1kp3_1 档案室 PDB 1sih AA PDB 1kps_2 AB PDB 1kp3_1 CD PDB 1sjy AA 期望输出 PDB 1kps_2 AB 1tgs not available PDB 1kp3_1 CD 非常感谢您的帮助 cat file1 | while read aline;do grep $aline file2 || echo $

我有两个文件名为file_a和file_b。我想根据文件a的数据从文件b中提取数据

档案室

1kps_2
1tgs
1kp3_1
档案室

PDB 1sih AA
PDB 1kps_2 AB
PDB 1kp3_1 CD
PDB 1sjy AA
期望输出

PDB 1kps_2 AB
    1tgs   not available
PDB 1kp3_1 CD
非常感谢您的帮助

cat file1 | while read aline;do grep $aline file2 || echo $aline not available;done
…不用awk就可以做你想做的事。注意,这在sh(或bash)中有效,但最近它遭到了一些抨击;)

如果文件很大,那么awk脚本可能会/可能会更有效率。但是,根据文件是否排序,实际上可能没有任何区别,因为第二部分必须始终对整个文件2进行grep处理,以确保可能的匹配不会“高于”文件2中的当前位置


文件1中的最后一行为空也会在结尾的一行上自动生成“不可用”。

试试这个awk one liner:

awk 'NR==FNR{b[$2]=$0;next}{print $0 in b? b[$0]: $0 " not available"}' fileb filea

你需要展示你尝试了什么,这样我们才能帮助你修复它。