在linux中输出匹配行

时间:2017-03-30 13:29:56

标签: bash

我想将第一个文件中的数字与第二个文件的第二列相匹配,并在单独的输出文件中获取匹配的行。请告诉我代码有什么问题?

我在文件IDS.txt中有一个数字列表

10028615
1003
10096344
10100
10107393
10113978
10163178
118747520

我有第二个名为src1src22.txt的文件

From src:'1'    To src:'22'
CHEMBL3549542   118747520
CHEMBL548732    44526300
CHEMBL1189709   11740251
CHEMBL405440    44297517
CHEMBL310280    10335685

预计newoutput.txt

CHEMBL3549542   118747520

我写了这段代码

while read line; do cat src1src22.txt | grep -i -w "$line"  >> newoutput.txt done<IDS.txt

3 个答案:

答案 0 :(得分:1)

您的命令行有效 - 除了您缺少分号:

while read line; do grep -i -w "$line" src1src22.txt; done < IDS.txt >> newoutput.txt

答案 1 :(得分:1)

我找到了一种执行任务的有效方法。而不是循环尝试这个-f在它旁边的文件中给出模式并在下一个文件中搜索。使用grep可能出现无效字符长度的可能性降低,循环减慢了进程。

 grep -iw -f IDS.txt src1src22.tx >>newoutput.txt

答案 2 :(得分:0)

试试这个 -

awk 'NR==FNR{a[$2]=$1;next} $1 in a{print a[$1],$0}' f2 f1
CHEMBL3549542 118747520

其中f2是src1src22.txt