我有一个大型选项卡文件,其中包含 15 列 (FILE1) 和应出现在表中的名称列表 (FILE2)。问题是该名称可能出现在 FILE1 的第 4 至 10 列中,并且大小写可能不匹配。
我想要一个命令来搜索行中的命中,然后打印整行。最好这不区分大小写,并且不会打印 FILE2 中的名称是较大单词的一部分的行。
我已经尝试过以下方法:
grep -Fwf FILE2 FILE1 > out
xargs -I {} grep "^{}" FILE1 < FILE2 > out
第一个只是将 FILE1 复制到 out 中。第二个给出一个空白文件。
我还尝试了一些awk
命令,它们要么给出一个空文件,要么如上所述复制 FILE1。我现在正在努力提高我的 Linux 技能,所以如果可能的话,如果您解释一下您的方法,我将非常感激。
文件1
tax_id GeneID Symbol LocusTag Synonyms dbXrefs chromosome map_location description type_of_gene Symbol_from_nomenclature_authority Full_name_from_nomenclature_authority Nomenclature_status Other_designations Modification_date
7 5692769 NEWENTRY - - - - - Record to support submission of GeneRIFs for a gene not in Gene (Azotirhizobium caulinodans. Use when strain, subtype, isolate, etc. is unspecified, or when different from all specified ones in Gene.). other - - - - 20160818
9 1246500 repA1 pLeuDn_01 - - - - putative replication-associated protein protein-coding - - - - 20160813
9 1246501 repA2 pLeuDn_03 - - - - putative replication-associated protein protein-coding - - - - 20160716
9 1246502 leuA pLeuDn_04 - - - - 2-isopropylmalate synthase protein-coding - - - - 20160903
9 1246503 leuB pLeuDn_05 - - - - 3-isopropylmalate dehydrogenase protein-coding - - - - 20150520
9 1246504 leuC pLeuDn_06 - - - - isopropylmalate isomerase large subunit protein-coding - - - - 20160806
9 1246505 leuD pLeuDn_07 - - - - isopropylmalate isomerase small subunit protein-coding - - - - 20160730
9 1246509 ibp pBPS1_01 - - - - Ibp protein protein-coding - - - - 20150801
9 1246510 repA1 pBPS1_02 - - - - repA1 protein protein-coding - - - - 20160813
文件2
sacX
arcB
metB
sprT
adrB_2
fadD
trpC
ansP2
group_1428
plsX
repA
答案1
回答在上面评论里 请参阅@Philippos 和@George Vasiliou 的回复
简而言之,答案是 grep -Fwf FILE2 FILE1 > out
我遇到了一个问题,然后我执行了复制 FILE1 的命令。发生这种情况的原因是 FILE2 中尾随空白行。当我删除这些命令时,该命令完美运行。
由于文件中的某些文本可能与大小写不匹配,因此我在上面的命令中包含了 -i 。
感谢所有提供帮助的人。