2012-04-03 57 views
0

我有一个文本文件,其中包含双引号内的字符串。我想提取这些字符串并检查另一个文件以查看它们是否存在。现在,我得到尽可能:awk和grep的存在

awk -F'"' '{print $2}' ~/test | <GREP COMMAND> 

如何办理提取的字符串排序与我的grep命令一个循环?

回答

1

如果你有GNU grep;

grep -f - file 

如果没有,你可以从AWK打印出sed脚本,或可能创建一个稍微复杂一点的awk脚本。或者只是将输出结合成一个大的表达式egrep;

egrep "$(awk -F'"' '{ printf ("%s%s", j, $2); j="|" }' input)" 
+0

这个解决方案也很酷。比printf命令更有效 – syker 2012-04-03 19:58:21

+0

在printf命令中,为什么j在$ 2之前出现?我首先用$ 2测试了它,并且我的第一个和第二个字符串不是由管道分隔的, t看起来不明白为什么$ 2不应该是第一 – syker 2012-04-03 20:02:36

+0

还有一个问题,一个人如何围绕另一个字符串'awk结果',假设我想匹配title =“”,其中是管道分隔的结果, $(awk -F'“'''{printf(”%s%s“,j,$ 2); j =”|“}'input)” – syker 2012-04-03 20:08:44

2

看看xargs,它从标准输入读取行,并为每行运行一次给定的命令。这将取决于什么版本已安装的xargs,但我会像这样开始:

awk -F'"' '{print $2}' ~/test | xargs -I % grep % <file> 

-I %标志告诉它从标准输入读取的说法来取代%,而不是将其附加到命令行的末尾,这是默认值。

+0

这是相当低效的;它会为每个搜索短语产生一个'grep'。 – tripleee 2012-04-03 19:15:20

+0

感谢这对我很好: awk -F''''{print $ 2}'〜/ test | xargs -I%grep'name = \“%\”'文件 – syker 2012-04-03 19:55:09

1

引文结束的字符串和管到grep的模式文件:

tr -d '"' < strings.txt | grep --file=- another_file.txt 

(请注意,这不会逃过"字符正确的行为,但你的awk命令也不会觉得要,所以我假设它不是问题。)

如果适用,使用带有grep的--fixed-strings也会加快速度。

+0

Ageee如果删除首尾双引号是'awk'所需的全部内容,那么'tr -d'“''是优越的。 – tripleee 2012-04-04 09:46:08