之前提出过类似的问题,但我特别感兴趣的是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
但也许有更快的方式在单行中完成相同的任务?
答案 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