cut コマンドで目的の出力が得られませんか?

cut コマンドで目的の出力が得られませんか?
[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: -f2root:::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列間に複数のスペースがあるため、使用しているコマンドでは目的の出力が得られません。

関連情報