awk + ​​如何捕获两个字符的第三个字段

awk + ​​如何捕获两个字符的第三个字段

我们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

在这种情况下,应该使用什么语法来捕获第三个字段上的以太 R 或 D ?

答案1

任何一个

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 } '

相关内容