两个文本文件与grep比较

时间:2014-03-13 16:33:38

标签: text grep comparison pipeline

我有两个文件(a.txt,b.txt)

a.txt是一个英文单词列表(在一行中有一个单词) b.txt包含在每一行中:一个数字,一个空格字符,一个5-65个字符长的字符串 (例如b.txt可以包含:1234 dsafaaraehawada

我想知道b.txt中的哪一行包含来自a.txt的单词以及有多少单词?

示例输入:

A.TXT

green
apple
bar

b.txt

1212 greensdsdappleded
12124 dfsfsd
123 bardws

输出:

2 1212 greensdsdappleded
1 123 bardws

第一行包含'绿色'和' apple' (2) 第二行什么都没有。 第三行包含' bar' (1)

这就是我想知道的一切。

代码(由Barmar先生):

grep -F -o -f a.txt b.txt | sort | uniq -c | sort -nr

但它需要修改。

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

awk 'NR==FNR{A[$1]; next} {t=0; for (i in A) t+=gsub(i,"&",$2)} t{print t, $0}' file1 file2

答案 1 :(得分:0)

尝试这样的事情:

awk '
NR==FNR { list[$1]++; next }
{
    cnt=0
    for(word in list) {
        if(index($2,word) > 0) 
            cnt++
    } 
    if(cnt>0) 
    print cnt,$0
}' a.txt b.txt

测试:

$ cat a.txt
green
apple
bar

$ cat b.txt
1212 greensdsdappleded
12124 dfsfsd
123 bardws

$ awk '
NR==FNR { list[$1]++; next }
{
    cnt=0
    for(word in list) {
        if(index($2,word) > 0)
            cnt++
    }
    if(cnt>0)
        print cnt,$0
}' a.txt b.txt
2 1212 greensdsdappleded
1 123 bardws