UNIX:使用comm而不创建临时文件

时间:2014-01-04 14:18:59

标签: wget stdin uniq comm

我想使用comm来比较2个列表:一个由随机生成的单词组成:

cat /dev/urandom | head -n 10000 | strings | tr 'A-Z' 'a-z' | sort

另一个是英语词典:

wget -q0- <URL> | sort

(我无法真正泄露网址) 我尝试将两个列表保存到临时文件然后使用     comm -12 file1 file2 它工作,但现在我想这样做而不创建那些临时文件。有办法吗?

2 个答案:

答案 0 :(得分:1)

您的代码(重构useless use of cat)可以通过简单的重写来使用Bash process substitution

comm <(head -n 10000 </dev/urandom |
        strings | tr 'A-Z' 'a-z' | sort) <(wget -q0- <URL> | sort)

然而,除非你的目标是加速宇宙的热量死亡,否则你的代码看起来效率非常低。也许你应该解释一下你想要完成什么? (另外如果你想在/dev/urandom输出中找到字典单词的频率,我相信strings将过滤掉任何非常短的单词。)

答案 1 :(得分:0)

顺便说一下,我找到了另一个解决方案,而不是使用comm。

((head -n 10000 </dev/urandom | strings | tr 'A-Z' 'a-z' | sort | uniq) ; (wget -q0- <URL> | sort)) | sort | uniq -d

效率不高,但它有效(uniq -d只打印重复的行=两个文件中的行)。