我有一个文本文件,其中包含双引号内的字符串。我想提取这些字符串并检查另一个文件以查看它们是否存在。现在,我得到尽可能:awk和grep的存在
awk -F'"' '{print $2}' ~/test | <GREP COMMAND>
如何办理提取的字符串排序与我的grep命令一个循环?
我有一个文本文件,其中包含双引号内的字符串。我想提取这些字符串并检查另一个文件以查看它们是否存在。现在,我得到尽可能:awk和grep的存在
awk -F'"' '{print $2}' ~/test | <GREP COMMAND>
如何办理提取的字符串排序与我的grep命令一个循环?
如果你有GNU grep;
grep -f - file
如果没有,你可以从AWK打印出sed
脚本,或可能创建一个稍微复杂一点的awk脚本。或者只是将输出结合成一个大的表达式egrep
;
egrep "$(awk -F'"' '{ printf ("%s%s", j, $2); j="|" }' input)"
看看xargs,它从标准输入读取行,并为每行运行一次给定的命令。这将取决于什么版本已安装的xargs,但我会像这样开始:
awk -F'"' '{print $2}' ~/test | xargs -I % grep % <file>
的-I %
标志告诉它从标准输入读取的说法来取代%
,而不是将其附加到命令行的末尾,这是默认值。
引文结束的字符串和管到grep的模式文件:
tr -d '"' < strings.txt | grep --file=- another_file.txt
(请注意,这不会逃过"
字符正确的行为,但你的awk命令也不会觉得要,所以我假设它不是问题。)
如果适用,使用带有grep的--fixed-strings
也会加快速度。
Ageee如果删除首尾双引号是'awk'所需的全部内容,那么'tr -d'“''是优越的。 – tripleee 2012-04-04 09:46:08
这个解决方案也很酷。比printf命令更有效 – syker 2012-04-03 19:58:21
在printf命令中,为什么j在$ 2之前出现?我首先用$ 2测试了它,并且我的第一个和第二个字符串不是由管道分隔的, t看起来不明白为什么$ 2不应该是第一 – syker 2012-04-03 20:02:36
还有一个问题,一个人如何围绕另一个字符串'awk结果',假设我想匹配title =“”,其中是管道分隔的结果, $(awk -F'“'''{printf(”%s%s“,j,$ 2); j =”|“}'input)” –
syker
2012-04-03 20:08:44