在awk中使用basename还是endwith?

ton*_*y19 3 bash awk

我正在使用名称awk来获取pid特定进程.

#!/bin/sh

for pid in $(ps | awk '$4 == "foo" { print $1 }')
do
    i=1
    echo "killing foo at pid $pid"
    kill $pid && echo 'ok' || echo 'failed'
done
Run Code Online (Sandbox Code Playgroud)

psOSX 上的输出是这样的:

$ ps
  PID TTY           TIME CMD
 1858 ttys000    0:00.15 -bash
 4148 ttys000    0:01.37 /a/b/c/foo
Run Code Online (Sandbox Code Playgroud)

但是我的shell脚本只有在CMD列中的进程完全foo没有绝对路径时才有效.

我想我可以使用basename,但我怎么称它为awk
或者
有什么样$4.endswith('foo')awk

Dan*_*ego 7

awk可以使用正则表达式.所以不是$4 == "foo",你可以这样做:

awk '$4 ~ /\/foo$/ { print $1 }'
Run Code Online (Sandbox Code Playgroud)

正则表达式位于/和之间/.\/foo$他说:"foo之后是反斜杠,然后是场地的结束." 在这种情况下,您的字段是/a/b/c/foo,因此它将匹配.