我试图在另一个文件中找到一个文件的模式。
文件1中的模式看起来像这样:
ENSG00000203875.13
ENSG00000262691.1
ENSG00000254911.3
文件二包含:
ENSG00000203875.13 aa aaa bbb cc
ENSG00000227782.2
ENSG00000229582.3
ENSG00000241769.7
ENSG00000245904.4
ENSG00000254823.2
ENSG00000254911.3 cc ccc ccc
ENSG00000260213.6
ENSG00000260997.1
ENSG00000261799.1
ENSG00000262691.1 bbb bbb bbb
ENSG00000267249.1
ENSG00000270012.1
ENSG00000270091.1
ENSG00000270361.1
ENSG00000271533.1
ENSG00000271833.1
ENSG00000271870.1
ENSG00000272379.1
ENSG00000272631.1
ENSG00000273066.5
ENSG00000273855.1
ENSG00000278966.2
ENSG00000279332.1
ENSG00000279407.1
ENSG00000279616.1
ENSG00000279684.1
ENSG00000279835.1
ENSG00000286181.1
ENSG00000286986.1
ENSG00000287817.1
我想只找到
ENSG00000203875.13 aa aaa bbb cc
ENSG00000254911.3 cc ccc ccc
ENSG00000262691.1 bbb bbb bbb
作为输出。我很确定grep -f file_one.txt file_two.txt
应该做的工作,但相反,我只是得到file_two的内容作为输出。我不知道我犯了什么错。有人能指出来吗?
我会这样做:
for i in $(cat file_one.txt); do grep -i $i file_two.txt; done
ENSG00000203875.13 aa aaa bbb cc
ENSG00000262691.1 bbb bbb bbb
ENSG00000254911.3 cc ccc ccc
您可以考虑使用awk
方法,跟踪数组a
中file_one.txt的第一列的值,然后检查file_two.txt的第一列的值是否存在于数组的键中:
awk 'NR==FNR {a[$0]; next} $1 in a' file_one.txt file_two.txt
输出ENSG00000203875.13 aa aaa bbb cc
ENSG00000254911.3 cc ccc ccc
ENSG00000262691.1 bbb bbb bbb
另一个选项使用grep:
grep -f file_one.txt file_two.txt