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



我是bash的新手。我有两个单词列表文件,如下所示。

文件1(搜索词的单词列表)

foo
bar

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

beforefoo
fooafter
beforefooafter
bar

我想制作一个结果文件,其中包含来自 file1 的搜索词和来自文件 2 的所有单词,其中包含搜索词,例如:

foo beforefoo fooafter beforefooafter
bar bar

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

感谢您的回答。

使用 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

使用 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,它会更准确。

相关内容

  • 没有找到相关文章

最新更新