什么是 awk '{ print $2; }' 到底在做什么?

Moh*_*thi 0 shell-script bash-scripting

我想知道这个语句到底在做什么,尤其是那awk部分。

ps aux | grep 'sidekiq 5' | grep -v grep | awk '{ print $2; }' | xargs kill -${2:-'TERM'}
Run Code Online (Sandbox Code Playgroud)

我知道整个管道应该杀死sidekiq进程。

ber*_*sch 5

  • ps aux 列出所有进程。
  • grep 'sidekiq 5' 只显示列表中包含字符串“sidekiq 5”的那些行。
  • grep -v grep删除那些包含字符串“grep”的行。这样做是为了grep过滤掉前一个流水线阶段的进程。
  • awk '{ print $2; }'打印每行的第二个字段。该字段恰好是ps aux输出中的进程 ID 。
  • xargs kill -${2:-'TERM'}从选定的 sidekiq 进程中获取进程 ID,并将它们作为参数提供给kill命令。信号是 $2,或者如果 $2 未定义,则是 SIGTERM。

  • 使用 `grep '[s]idekiq 5'` 将使 `grep -v grep` 变得不必要,因为 `[s]idekiq 5` 表达式匹配 `sidekiq 5` 但不匹配表达式本身。这是老套路了。 (2认同)