
[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 cut
behandelt Leerzeichen nicht anders als andere Zeichen. Gibt also cut -d " " -f2
in zurück ""
, root 19
genau wie es ""
für cut -d: -f2
in 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 awk
where 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 cut
von Ihnen verwendete Befehl gibt nicht die gewünschte Ausgabe aus, da zwischen den Spalten mehr als ein Leerzeichen steht.