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 " "フィールド区切り文字は単一の空白文字です。シェルトークン化とは異なり、スペースはcut他の文字とは異なる処理はされません。したがって、に戻るのと同じようにcut -d " " -f2戻ります。""root   19""cut -d: -f2root:::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}'

パラメータのみが一致します。

おすすめ記事