我正在使用大变量并加快我的脚本我想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
答案 0 :(得分:7)
在bash中,您可以使用单行heredoc从变量重定向到stdin:
awk "/test/ {for(i=1; i<=100; i++) {getline; print}}" <<< "$var"
答案 1 :(得分:2)
如果我理解你,你会在shell变量var
中存储一个多行字符串,并且你想从该字符串中包含test
的行打印100行。使用GNU awk,它将是:
$ awk -v var="$var" 'BEGIN{ printf "%s", gensub(/.*(test([^\n]*\n){100}).*/,"\\1","",var) }'
e.g。打印“test”加上后面的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
使用其他awks,您可以使用match()+ substr()来获得相同的结果。