关于bash:如何使用grep从文件循环模式

how to loop over pattern from a file with grep

本问题已经有最佳答案,请猛点这里访问。

我试图对文本文件(list.txt)中的一系列模式进行grep,以找出目标文件(file1)中每个模式有多少匹配项。目标文件如下所示:

1
2
3
4
5
6
7
$ cat file1

2346 TGCA
2346 TGCA
7721 GTAC
7721 GTAC
7721 CTAC

我需要每个数字模式的计数(2346和2271)。

如果您用引号提供模式列表,我将使用此脚本:

1
2
3
4
 $ for p in '7721' '2346'; do   printf '%s = '"$p"; grep -c"$p" file1; done

 7721 = 3
 2346 = 2

我要做的是在list.txt中搜索所有模式:

1
2
3
4
5
6
7
8
9
10
$ cat list.txt

7721
2346
6555
25425
22
125
....
19222

如何将上面的脚本转换为在list.txt中查找并搜索每个模式,并返回与上面相同的输出(pattern=count),例如:

1
2
3
4
2346 = 2
7721 = 3
....
19222 = 6


试试这个awk-oneliner:

1
 awk 'NR==FNR{p[$0];next}$1 in p{p[$1]++}END{for(x in p)print x, p[x]}' list.txt file