parse mehrere Textzeilen bash - linux, bash, awk

Ich muss analysieren

0 R username+ 13790 13743  0  80   0 - 28162 -      19:07 pts/0    00:00:00 grep --color=auto pm2
4 S root     25197     1  0  80   0 - 237119 ep_pol Apr05 ?       00:00:32 node /usr/local/lib/node_modules/pm2/bin/pm2

Art der Ausgabe und finden Sie die PID fĂĽr die /usr/local/lib/node_modules/pm2/bin/pm2 Prozess.

soweit habe ich

PROCESS_ID=$(ps -elf | grep pm2 | grep -v grep | awk "FNR<2{print $4}")

Aber dies gibt nur die PID für die erste Zeile an. Es gibt keine Garantie, welche Zeile die richtige PID sein wird, da das Startprogramm manchmal 2-3 Ergebnisse für dieses Grep anzeigt. Ich brauche eine Möglichkeit, um zu filtern, welche Zeile zu awk gelesen werden soll, da die gewünschte Zeile immer nur sein wird Es ist immer nur eine Hilfe dabei

Antworten:

1 fĂĽr Antwort â„– 1

Schauen Sie sich an pgrep:

pgrep -f /usr/local/lib/node_modules/pm2/bin/pm2

0 fĂĽr Antwort â„– 2

awk kann gefiltert werden, indem der Ausdruck mit / regex / gestartet wird

ich habe mich verändert

ps -elf | grep pm2 | grep -v grep | awk "FNR<2{print $4}"

zu

ps -elf | grep pm2 | grep -v grep | awk "/node_modules/FNR<2{print $4}"

und es hat funktioniert. Sie können einen längeren Pfad auch suchen, indem Sie Schrägstriche ausschließen:

ps -elf | grep pm2 | grep -v grep | awk "//lib/node_modules/FNR<2{print $4}"

funktioniert auch

So furchterregend wie awk ist, dieser Artikel war sehr einfach http://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/