[root@localhost ~]# ps aux | grep ata
root 19 0.0 0.0 0 0 ? S 07:52 0:00 [ata/0]
root 20 0.0 0.0 0 0 ? S 07:52 0:00 [ata_aux]
root 1655 0.0 2.6 22144 13556 tty1 Ss+ 07:53 0:18 /usr/bin/Xorg :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-t1gMCU/database -nolisten tcp vt1
root 3180 0.0 0.1 4312 728 pts/0 S+ 14:09 0:00 grep ata
[root@localhost ~]# ps aux | grep ata | cut -d" " -f 2
[root@localhost ~]#
我期望输出中的第二列;但没有得到任何东西。有任何想法吗 ?
答案1
对于-d " "
,字段分隔符是一个(且仅有一个)空格字符。与 shell 分词相反,cut
对空格的处理与任何其他字符没有任何不同。因此cut -d " " -f2
返回""
in root 19
,就像返回""
incut -d: -f2
一样root:::19
。
您需要挤压空白才能将任何空间序列转换为一空间:
ps aux | grep ata | tr -s ' ' | cut -d ' ' -f2
或者使用awk
其默认吐出模式中的 where ,它不使用分隔符,而是拆分为非空白字符序列列表:
ps aux | awk '/ata/{print $2}'
但在这种情况下,您可能需要使用:
pgrep -f ata
或者至少:
ps -eo pid= -o args= | awk '/ata/{print $1}'
仅匹配参数。
答案2
使用:
ps aux | awk '/ata/{print $2}'
您使用的命令cut
没有给出所需的输出,因为列之间有多个空格。