如何awk用户输入

如何awk用户输入

我正在尝试匹配一个模式,然后在其后打印出两行。我可以使用以下代码成功地做到这一点。

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.

相关内容