我有两个文件: 文件 1 是一个输入文件,仅一列中有 191 行。文件 2 是一个主文件,有 2 列 712 行。
输出=找到Input_File和Master_File第一列之间的匹配,然后打印Master_File中匹配行的行。
输入文件示例:
2190
2209
2214
2234
2261
2287
2303
2320
13773
29292
主文件示例:
945713 Ignavibacterium_album_JCM_16511_uid162097
521045 Kosmotoga_olearia_TBF_19_5_1_uid59205
1254432 Sorangium_cellulosum_So0157_2_uid210741
1144275 Corallococcus_coralloides_DSM_2259_uid157997
59374 Fibrobacter_succinogenes_S85_uid41169
741091 Rahnella_Y9602_uid62715
83332 Mycobacterium_tuberculosis_H37Rv_uid57777
103690 Nostoc_PCC_7120_uid57803
115713 Chlamydophila_pneumoniae_CWL029_uid57811
158879 Staphylococcus_aureus_N315_uid57837
我尝试在 for 循环中使用 grep:
for i in $(cat Input_File); do grep $i Master_File; done
但该命令在 Master_File 的两列中搜索匹配项。
我知道如何用 awk 仅打印第一列,但打印匹配行的目的是获取 Master_File 中的第二列信息。
无论如何,是否可以使用 awk 打印 Master_File 的第一列,通过引用 Input_File 使用 for 循环查找匹配项并打印 Master_File 中匹配的行?
或者有什么更简单的命令方法建议?
答案1
试试这个 awk 命令
awk 'NR==FNR{Arr[$0]++;next}{if($1 in Arr){print $0}}' input_file master_file
读取输入文件并将内容保存到数组中,然后迭代第二个文件并检查第一列值是否在数组中。如果它存在于数组中,则打印 master_file 行