一种线性解决方案,将一个文件中的行与另一个文件匹配

时间:2015-02-08 03:36:28

标签: bash

之前提出过类似的问题,但我特别感兴趣的是Unix单线程解决方案。

我希望能够在命令行上快速将一个文件的行匹配到第二个文件中的行。

因此,例如,我的第一个文件foo是:

$ cat foo
apple
orange
beer
bat

,第二个文件bar是:

$ cat bar
beer 25
bat 78
nothing 90

现在我希望将foo中的行与bar匹配,并在匹配时打印bar的内容。我有一个带有for循环和grep实用程序的slowww解决方案:

$ for l in $(cat foo); do grep $l bar; done

但也许有更快的方式在单行中完成相同的任务?

2 个答案:

答案 0 :(得分:3)

请使用grep

# long version
grep --fixed-strings --word-regexp --file=foo bar
# short version
grep -F -w -f foo bar
# mini version
grep -Fwffoo bar

结果

beer 25
bat 78

答案 1 :(得分:2)

如果您可以对文件进行排序:

$ sort foo > foo.sorted
$ sort bar > bar.sorted
$ join -t ' ' foo.sorted bar.sorted

结果

bat 78
beer 25