搜索字符串

时间:2013-01-04 22:13:53

标签: shell scripting

我想有一个shell脚本搜索两个文件并返回一个字符串列表:

文件A只包含一个唯一的字母数字字符串列表,每行一个,如下所示:

accc_34343
GH_HF_223232
cwww_34343
jej_222

文件B包含一些字符串的列表(有时不止一次),以及第二列信息,如下所示:

accc_34343 dog
accc_34343 cat
jej_222 cat
jej_222 horse

我想创建一个第三个文件,其中包含文件A中不在文件B中的字符串列表。

我尝试过使用grep -v的一些循环,但这不起作用。因此,在上面的示例中,新文件将具有此内容:

GH_HF_223232
cwww_34343

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

以下是您可以做的事情:

grep -v -f <(awk '{print $1}' file_b) file_a > file_c

<强>解释

  • grep -v:使用-v选项grep来反转匹配
  • -f:使用-f选项grep指定模式来自文件
  • <(awk '{print $1}' file_b)<(awk '{print $1}' file_b)只是在不使用临时文件的情况下从file_b中提取第一列值; <( ... )语法为process substitution
  • file_a:告诉grep要搜索的文件是file_a
  • > file_c:输出要写入file_c

答案 1 :(得分:1)

comm用于查找文件之间的交叉点和差异:

comm -23 <(sort fileA) <(cut -d' ' -f1 fileB | sort -u)

结果:

GH_HF_223232
cwww_34343

我假设你的shell是bash / zsh / ksh

答案 2 :(得分:0)

awk 'FNR==NR{a[$0];next}!($1 in a)' fileA fileB

检查here