awk两个wordlist文件,并获取第二个文件中包含第一个单词的所有单词

时间:2014-02-20 09:33:59

标签: bash awk

我是bash的新手。我有两个wordlist文件,如下所示。

file1(搜索词的词表)

foo
bar

file2(包含大量单词组合的wordlist)

beforefoo
fooafter
beforefooafter
bar

我想创建一个结果文件,其中包含来自file1的searchword和来自file2的所有单词,其中包含搜索词:

foo beforefoo fooafter beforefooafter
bar bar

我需要一个bash脚本来执行此操作。 File1和file2每行只包含一个单词,file1的行数约为50.000,file2的行数约为100.000.000所以我需要一个好的脚本来尽快完成这个。

感谢您的回答。

2 个答案:

答案 0 :(得分:2)

使用awk:

awk 'FNR==NR{a[$1]; next}
            {s=$1; for (i in a) if (index(i, $1)) s=s FS i; if (s!=$1) print s}' file2 file1
foo fooafter beforefoo beforefooafter
bar bar

答案 1 :(得分:1)

使用awk

awk 'NR==FNR{a[$1]=$1;next}
{  for (i in a) if ($0~i) a[i]=a[i] FS $0}
END{for (i in a) print a[i]}' file1 file2

解释

  • NR==FNR{a[$1]=$1;next}将第一个文件读入关联数组a
  • for (i in a) if ($0~i) a[i]=a[i] FS $0},如果第1列是a的索引,则将第二个文件的内容附加到a
  • END{for (i in a) print a[i]打印数组
  • 的结果
  • 使用$ 1,因为OP已经提到每行一个单词,但也许在这些单词之前和之后有一些空格,所以使用$ 1,它会更准确。