Sie erhalten mit dem Befehl „Cut“ nicht die gewünschte Ausgabe?

Sie erhalten mit dem Befehl „Cut“ nicht die gewünschte Ausgabe?
[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 ~]#

Ich würde eine zweite Spalte in der Ausgabe erwarten, bekomme aber nichts. Irgendwelche Ideen?

Antwort1

Bei -d " "ist der Feldtrenner ein (und nur ein) Leerzeichen. Im Gegensatz zur Shell-Worttrennung cutbehandelt Leerzeichen nicht anders als andere Zeichen. Gibt also cut -d " " -f2in zurück "", root   19genau wie es ""für cut -d: -f2in zurückkehren würde root:::19.

Man müsste entweder die Leerzeichen zusammendrücken, um eine beliebige Sequenz von Leerzeichen ineinsRaum:

ps aux | grep ata | tr -s ' ' | cut -d ' ' -f2

Oder verwenden Sie awkwhere im Standard-Spitting-Modus. Dabei wird kein Trennzeichen verwendet, sondern die Liste wird in Sequenzen von Zeichen aufgeteilt, die nicht leer sind:

ps aux | awk '/ata/{print $2}'

In diesem Fall möchten Sie jedoch möglicherweise Folgendes verwenden:

pgrep -f ata

Oder zumindest:

ps -eo pid= -o args= | awk '/ata/{print $1}'

Nur zum Abgleichen mit den Argumenten.

Antwort2

Verwenden:

ps aux | awk '/ata/{print $2}'

Der cutvon Ihnen verwendete Befehl gibt nicht die gewünschte Ausgabe aus, da zwischen den Spalten mehr als ein Leerzeichen steht.

verwandte Informationen