awk与grep的存在

awk与grep的存在,awk,grep,Awk,Grep,我有一个文本文件,它的字符串用双引号括起来。我想提取这些字符串并检查另一个文件,看看它们是否存在。现在,我已经做到了: awk -F'"' '{print $2}' ~/test | <GREP COMMAND> awk-F''''{print$2}'~/test| 如何使用grep命令以某种循环的方式遍历提取的字符串?看一看,它从标准输入中读取行,并为每行运行一次给定的命令。这将取决于您安装的xargs版本,但我将从以下内容开始: awk -F'"' '{print $2}'

我有一个文本文件,它的字符串用双引号括起来。我想提取这些字符串并检查另一个文件,看看它们是否存在。现在,我已经做到了:

awk -F'"' '{print $2}' ~/test | <GREP COMMAND>
awk-F''''{print$2}'~/test|
如何使用grep命令以某种循环的方式遍历提取的字符串?

看一看,它从标准输入中读取行,并为每行运行一次给定的命令。这将取决于您安装的xargs版本,但我将从以下内容开始:

awk -F'"' '{print $2}' ~/test | xargs -I % grep % <file>
awk-F''''{print$2}'~/test | xargs-I%grep%
-I%
标志告诉它用从stdin读取的参数替换
%
,而不是将其附加到命令行的末尾,这是默认值。

看看,它从标准输入读取行,并为每行运行一次给定的命令。这将取决于您安装的xargs版本,但我将从以下内容开始:

awk -F'"' '{print $2}' ~/test | xargs -I % grep % <file>
awk-F''''{print$2}'~/test | xargs-I%grep%
-I%
标志告诉它用从stdin读取的参数替换
%
,而不是将其附加到命令行的末尾,这是默认值。

如果您有GNU grep

grep -f - file
如果没有,您可以从awk打印一个
sed
脚本,或者创建一个稍微复杂一点的awk脚本,或者将输出连接到一个大的
egrep
表达式中

egrep "$(awk -F'"' '{ printf ("%s%s", j, $2); j="|" }' input)"
如果你有GNU grep

grep -f - file
如果没有,您可以从awk打印一个
sed
脚本,或者创建一个稍微复杂一点的awk脚本,或者将输出连接到一个大的
egrep
表达式中

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

将字符串和管道作为模式文件解压缩到grep:

tr -d '"' < strings.txt | grep --file=- another_file.txt
tr-d''
(请注意,对于转义的
字符,这将无法正确执行,但您的awk命令也不会,因此我认为这不是问题。)


如果适用,将
--fixed strings
与grep一起使用也会加快速度。

将字符串和管道作为模式文件解压缩到grep:

tr -d '"' < strings.txt | grep --file=- another_file.txt
tr-d''
(请注意,对于转义的
字符,这将无法正确执行,但您的awk命令也不会,因此我认为这不是问题。)


如果适用,在grep中使用
--fixed strings
也会加快速度。

这是相当低效的;它会为每个搜索短语生成一个
grep
。感谢这对我来说非常有效:awk-F''''{print$2}'~/test xargs-I%grep'name=\“%\'”文件这是相当低效的;它将为每个搜索短语生成一个
grep
。感谢这对我来说非常有效:awk-F''''{print$2}'~/test | xargs-I%grep'name=\'%\“‘这个解决方案也很酷。每次都比spawn-a-grep-time更有效。在printf命令中,为什么j在$2之前出现?我首先用$2测试了它,我的第一个和第二个字符串没有用管道分隔。我似乎不明白为什么2美元不应该是第一个。还有一个问题,如何用另一个字符串来包围“awk结果”。假设我想匹配title=“”,其中是来自“$(awk-F'”{printf(“%s%s”,j,$2);j=“|“}”input)”的管道分隔结果,syker将其插入awk输出:
$(awk-F'”{printf(%stitle=\“%s\”,j,$2);j=“|“}”input)
对,尽管只有
title=
一次会更有效,类似于
egrep'title=(a | b | c)
而不是
egrep'title=a | title=b | title=c)
。你可以在
awk
脚本之外考虑这个因素,比如
egrep'title=(“$(awk…”)”文件
。这个解决方案也很酷。每次都比spawn-a-grep-time更有效。在printf命令中,为什么j在$2之前出现?我首先用$2测试了它,我的第一个和第二个字符串没有用管道分隔。我似乎不明白为什么2美元不应该是第一个。还有一个问题,如何用另一个字符串来包围“awk结果”。假设我想匹配title=“”,其中是来自“$(awk-F'”{printf(“%s%s”,j,$2);j=“|“}”input)”的管道分隔结果,syker将其插入awk输出:
$(awk-F'”{printf(%stitle=\“%s\”,j,$2);j=“|“}”input)
对,尽管只有
title=
一次会更有效,类似于
egrep'title=(a | b | c)
而不是
egrep'title=a | title=b | title=c)
。您可以在
awk
脚本之外考虑这一点,比如
egrep'title=(“$(awk…”)”文件
.Ageee如果您只需要为.Ageee
tr-d'删除前导和尾随的双引号,那么
awk
就可以了如果您只需要删除前导双引号和尾随双引号就可以了,那么“
的优势就大了。