我正在尝试匹配一个模式,然后在其后打印出两行。我可以使用以下代码成功地做到这一点。
awk '/'202404'/{c=3}c&&c--' consolelog.log > testing.txt
我正在尝试将 替换202404
为我可以在终端中输入的内容。到目前为止我已经尝试过
echo "Enter peak value"
read peak
awk '/${peak}/{c=3}c&&c--' consolelog.log > testing.txt
但这不起作用。
我不一定需要使用 awk、grep 或 sed 或其他任何东西都可以。我只需要匹配用户输入的模式并在其后打印 2 行。
***更新***** 我正在摆弄它,我让它工作了。这是我完全怀念的事情。这就是我所做的。
awk 'c&&!--c;/'$peak'/{c=2}' consolelog.log > testing.txt
答案1
你的代码:
echo "Enter peak value"
read peak
awk '/${peak}/{c=3}c&&c--' consolelog.log > testing.txt
这不起作用,因为强引号会阻止 shell 执行变量扩展。这很好,因为awk
使用了很多弱引号的语法,使得使用起来非常困难。
但是,有多种方法可以在awk
脚本中使用环境变量。
您可以声明自己的变量:
read peak
awk -vpeak="$peak" '$0 ~ peak { c=3 } c&&c--' consolelog.log > testing.txt
或者您可以直接查看您刚刚填写的awk
内容:read
read peak
export peak
awk '$0 ~ ENVIRON["peak"] { c=3 } c&&c--' consolelog.log > testing.txt
答案2
echo "Enter peak value"
read peak
awk '/'"${peak}"'/{c=3}c&&c--' consolelog.log > testing.txt
尝试这个。
您需要关闭单引号,然后才能使用 Bash 变量。我建议将其放在双引号环境中,因为否则会导致awk
.