从两个文件中grep和打印字符串列表?

时间:2014-02-06 01:22:08

标签: ruby

我有两个大文件,我想获取一个字符串列表(在第三个文件中)并打印存在于第一个大文件中但不存在于另一个文件中的每个字符串。我想在命令行上运行它作为单行。

#snippet of big_file_1
this is ahello.$ line
blahblah he llo no

#snippet of big_file_2
a 123 line
blahblah help 

# list_of_strings file
hello
address
name

# expected output
=> hello

我尝试了以下两个选项。第一个给我一个shell错误,第二个没有输出。 hello位于第一个文件而不是第二个文件中,所以我期待它作为输出。在IRB中运行,第二个选项if()返回true。为什么我没有得到puts输出?

ruby -ne 'puts $_ if ((`grep #{$_} big_file_1`.length >0) && !(`grep #{$_} big_file_2`.length >0))' < list_of_strings
ruby -ne 'puts $_ if ((`grep $_ big_file_1`.length >0) && !(`grep $_ big_file_2`.length >0))' < list_of_strings

2 个答案:

答案 0 :(得分:2)

  

第一个给我一个shell错误,

这是因为-n ruby​​选项会在$_上留下换行符。这也回答了你的其他问题。

要解决此问题,请关闭chomp!

ruby -ne '$_.chomp!; puts $_ if ((`grep #{$_} big_file_1`.length >0) && \
  !(`grep #{$_} big_file_2`.length >0))' < list_of_strings

输出:

hello

答案 1 :(得分:1)

直接打击这很简单:

cat list_of_strings | while read query
do
  grep -q "$query" big_file_1 && ! grep -q "$query" big_file_2 && echo "$query"
done