
[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 ~]#
出力に 2 番目の列が表示されることを期待していますが、何も表示されません。何かアイデアはありますか?
答え1
では-d " "
、フィールド区切り文字は 1 つのスペース文字 (1 つだけ) です。シェルの単語分割とは異なり、cut
はスペースを他の文字と区別せずに扱います。したがって、で を返すのと同じように、でを返しcut -d " " -f2
ます。""
root 19
""
cut -d: -f2
root:::19
スペースの連続を変換するには、空白を圧縮するか、1つ空間:
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
列間に複数のスペースがあるため、使用しているコマンドでは目的の出力が得られません。