Awk

awk + 如何擷取兩個字元的第三個欄位

  • March 25, 2019

ps ax我們得到以下輸出

ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Rs   611:56 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
    2 ?        S      4:46 [kthreadd]
    3 ?        R    3499:33 [ksoftirqd/0]
    5 ?        S<     0:00 [kworker/0:0H]
    7 ?        S     16:24 [migration/0]
    8 ?        S      0:00 [rcu_bh]
    9 ?        S      0:00 [rcuob/0]
   10 ?        S      0:00 [rcuob/1]
   11 ?        S      0:00 [rcuob/2]
   12 ?        S      0:00 [rcuob/3]
   13 ?        S      0:00 [rcuob/4]
   14 ?        S      0:00 [rcuob/5]
   15 ?        S      0:00 [rcuob/6]
   16 ?        S      0:00 [rcuob/7]
   17 ?        S      0:00 [rcuob/8]
   18 ?        S      0:00 [rcuob/9]
   19 ?        S      0:00 [rcuob/10]

所以我們想在第三個欄位上擷取 R 例如

ps ax | awk '$3 ~ /R/ { print }'
  139 ?        R    1935:31 [rcuos/1]

現在我們希望兩者都在第三個欄位中擷取 R 和 D

在這種情況下,為了在第三個欄位上擷取 ether R 或 D 應該是什麼語法?

任何一個

ps -ax | awk '$3 ~ /R|D/ '

或者

ps -ax | awk '$3 == "R" || $3 == "D" '

請注意,隱式動作是print


您可以使用o選項ps來更改或選擇您需要的欄位

ps -a -o stat,pid,args | awk '$1 ~ /[DR]/ { $1="" ; print } '

引用自:https://unix.stackexchange.com/questions/508519