Grep计算文件B中文件A的出现次数

时间:2017-06-19 17:51:31

标签: count grep

我有两个文件,文件A可能在文件B中,我想计算文件A中的每一行,它在文件B中出现的次数。例如:

档案A:

GAGGACAGACTACTAAAGCC
CTTGCCGCAGATTATCAGAG
CCAGCTTGATGTGTCCTGTG
TGATAGGCAGTGGAACACTG

档案B:

NTCTTGAGGAAAGGACGAATCTGCGGAGGACAGACTACTAAAGCCGTTTGAGAGCTAGAACGAGCAAGTTAAGAGA
TCTTGAGGAAAGGACGAAACTCCGGAGGACAGACTACTAAAGCCGTTTTAGAGCTAGAAAGCGCAAGTTAAACGAC
NTCTTGAGGAAAGGACGAATCTGCGCTTGCCGCAGATTATCAGAGGTATGAGAGCTAGAACGAGCAAGTTAAGAGC
TCTTGAGGAAAGGACGAAAGTGCGCTTGCCGCAGATTATCAGAGGTTTTAGAGCTAGAAAGAGCAAGTTAAAATAA
GATCTAGTGGAAAGGACGATTCTCCGCTTGCCGCAGATTATCAGAGGTTGTAGAGCTAGAACTAGCAAGTGACAAG
ATCTTGAGGAAAGGACGAATCTGCGCTTGCCGCAGATTATCAGAGGTTTGAGAGCTAGAACTAGCAAGTTAATAGA
CGATCAAGTGGAAGGACGATTCTCCGTGATAGGCAGTGGAACACTGGATGTAGAGCTAGAAATAGCAAGTGAGCAG
ATCTAGAGGAAAGGACGAATCTCCGTGATAGGCAGTGGAACACTGGTATGAGAGCTAGAACTAGCAAGTTAATAGA
TCTTGAGGAAAGGACGAAACTCCGTGATAGGCAGTGGAACACTGGTTTTAGAGCTAGAAAGCGCAAGTTAAAAGAC

输出应该是文件C:

2 GAGGACAGACTACTAAAGCC
4 CTTGCCGCAGATTATCAGAG
0 CCAGCTTGATGTGTCCTGTG
3 TGATAGGCAGTGGAACACTG

我想用grep这样做,我尝试了-c,o,f的一些变体,但我似乎无法获得正确的输出。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:0)

试试这个

for i in `cat a`; do echo "$i  `grep $i -c b`"; done

在这种情况下,如果文件A中的行在文件B的一行中多次出现,那么这将被计为一次。如果你想计算这样的事件,但没有重叠使用这个

for i in `cat a`; do printf $i; grep $i -o b | wc -l; done

也许这个变种会更快

cat b | grep "`cat a`" -o | sort | uniq -c

答案 1 :(得分:0)

loop = asyncio.ProactorEventLoop()
asyncio.set_event_loop(loop)

答案 2 :(得分:0)

用于比较文件的Linux命令:

comm FileA FileB

comm生成三列输出。第一列包含FileA唯一的行,第二列包含FileB唯一的行,第三列包含两个文件共有的行。