如何在awk脚本中插入参数?

时间:2019-06-14 09:07:20

标签: awk

我正在编写一个Shell脚本,该脚本关闭一些服务并尝试通过使用以下pid脚本来获取其awk。 但是,此awk脚本无法获取pid。怎么了?

ps -ef | awk -v port_no=10080 '/[m]ilk.*port=port_no/{print $2}'

ps -ef的结果如下:

username   13155 27705  0 16:06 pts/2    00:00:00 /home/username/.rbenv/versions/2.3.6/bin/ruby /home/username/.rbenv/versions/2.3.6/bin/milk web --no-browser --host=example.com --port=10080

此进程也正在使用其他端口参数,因此我想终止仅在port=10080上运行的进程。

下面的awk脚本可以正常工作,但是当我像上面一样使用awk -v指定端口号时,它不能很好地工作。

ps -ef | awk '/[m]ilk.*port=10080/{print $2}'
  

awk版本:GNU Awk 4.0.2

2 个答案:

答案 0 :(得分:1)

使用/../进行模式匹配的语法不适用于正则表达式中的变量。您需要为此使用~语法。

awk -v port_no=10080 '$0 ~ "[m]ilk.*port="port_no{print $2}'

如果您仔细注意正则表达式,则~的rhs上的正则表达式字符串在双引号".."下,但变量名中包含的端口号不应包含在引号中,例如扩展发生。

答案 1 :(得分:1)

使用pgrep可以轻松完成此任务:

$ pgrep -f '[m]ilk.*port=10080'

有关详情,请查看man pgrep