Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何在不使用echo的情况下awk或grep变量?_Performance_Bash_Awk_Grep - Fatal编程技术网

Performance 如何在不使用echo的情况下awk或grep变量?

Performance 如何在不使用echo的情况下awk或grep变量?,performance,bash,awk,grep,Performance,Bash,Awk,Grep,我正在处理大变量,为了加快脚本速度,我希望awk或grep不使用echo/printf 我所尝试的: awk "/test/ {for(i=1; i<=100; i++) {getline; print}}" "$var" awk: fatal: cannot open file `<<$var content>>' for reading (No such file or directory) grep -A 100 test "$var" grep: `<

我正在处理大变量,为了加快脚本速度,我希望
awk
grep
不使用
echo/printf

我所尝试的:

awk "/test/ {for(i=1; i<=100; i++) {getline; print}}" "$var"
awk: fatal: cannot open file `<<$var content>>' for reading (No such file or directory)

grep -A 100 test "$var"
grep: `<<$var content>>': No such file or directory

awk”/test/{for(i=1;i在bash中,可以使用一行代码将变量重定向到stdin:

awk "/test/ {for(i=1; i<=100; i++) {getline; print}}" <<< "$var"

awk”/test/{for(i=1;i如果我理解您的意思,您在shell变量
var
中存储了一个多行字符串,您希望从该字符串中包含
test
的行中打印100行。使用GNU awk:

$ awk -v var="$var" 'BEGIN{ printf "%s", gensub(/.*(test([^\n]*\n){100}).*/,"\\1","",var) }'
e、 g.打印“测试”及其后的2或3行,包括:

$ echo "$var"
abc
def
test
ghi
klm
nop

$ awk -v var="$var" 'BEGIN{ printf "%s", gensub(/.*(test([^\n]*\n){2}).*/,"\\1","",var) }'
test
ghi

$ awk -v var="$var" 'BEGIN{ printf "%s", gensub(/.*(test([^\n]*\n){3}).*/,"\\1","",var) }'
test
ghi
klm

对于其他AWK,您可以使用match()+substr()获得相同的结果。

我认为您不应该删除引号。
@Jotne AFAIK将herdeoc主体视为字符串:将执行插值,但shell注入(如
var=“a;rm-rf
”)将不起作用。无论如何,一对
“”
没有影响,所以我添加了它们。如果没有双引号,您将得到一行输入-输入中的换行符被展平为空格(多个空格被展平为单个空格,等等).从这个问题来看,
$var
可能在包含
test
的行之后有100多行-因此双引号是必要的。我明白了。谢谢@jonathanleffler可能的重复您应该仔细看看大变量是否真的是完成工作的最佳方式。我得到了
/usr/bin/awk:Argument list太长
则您没有使用我发布为
awk的脚本
在我的脚本中没有任何参数。请注意,在Solaris/usr/bin/awkis上,旧的、损坏的awk不应该使用。如果您在Solaris上,请使用/usr/xpg4/bin/awk或nawk。