Hilfeeeee! split & grep in awk umschreiben ohne splite

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Rebekkakka
Beiträge: 7
Registriert: 15.06.2015 18:31:59

Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Rebekkakka » 15.06.2015 18:55:08

Liebe Forummitglieder, ich muss folgendes in awk umschreiben, komme aber nicht drauf.
Ich muss noch mehr umschreiben, über ein paar tipps freue ich mich schon im Voraus

$fileDetails=`cat ${currentFile}/status | grep "^Uid:"`;
$Uid=(split(/\t/, $fileDetails))[1];

ich lese unter /proc/123* file status und hole die info über Uid dann splite ich die Ausgabe. Geht das mit awk, wenn ja, dann wie...

*z.B.

MfG R.

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von eggy » 15.06.2015 19:12:16

So?

Code: Alles auswählen

 awk -F' ' '/Uid:/{print "hier gibts\n"$0 "\n mit " NF " Feldern: z.B." $1 " und " $2 " usw." }' /proc/12313/status 
Nicht ganz perfekt, aber für nen Einstieg sollte es reichen (falls "Uid:" irgendwo anders auch vorkommt wird da auch was ausgegeben). Das -F ' ' ist der Feldtrenner, hier z.B. nen Space, danach folgen das Pattern /Uid:/ und die entsprechende Anweisung {} was gemacht werden soll, $0 ist die ganze Zeile, $1 usw die Felder.

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von ThorstenS » 15.06.2015 19:12:45

welches Feld magst du denn haben? Hier kommt das zwote:

Code: Alles auswählen

awk '/^Uid/{print $2}' $currentFile/status

Rebekkakka
Beiträge: 7
Registriert: 15.06.2015 18:31:59

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Rebekkakka » 15.06.2015 19:35:59

Vielen Dank, werde gleich testen, es ist nicht so schwer, wie ich es mir vorgestellt habe :)

Rebekkakka
Beiträge: 7
Registriert: 15.06.2015 18:31:59

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Rebekkakka » 15.06.2015 20:30:10

wie kann ich z.B. das 17-te, 18-te Element nach \t ausgeben $17 ? Ich habe irgendwo gelesen, dass es nur bis $9 funktionieren kann.

Vielen Dank!

Benutzeravatar
Meillo
Moderator
Beiträge: 9235
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Meillo » 15.06.2015 20:50:04

Rebekkakka hat geschrieben:wie kann ich z.B. das 17-te, 18-te Element nach \t ausgeben $17 ? Ich habe irgendwo gelesen, dass es nur bis $9 funktionieren kann.
In der Shell ist das so, in awk geht es aber.
Use ed once in a while!

Rebekkakka
Beiträge: 7
Registriert: 15.06.2015 18:31:59

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Rebekkakka » 15.06.2015 21:33:04

ich bekomme irgendwieüber perl Uid: 107, ich brauche aber nur den Wert, wenn ich den Befehl eingebe, kommt nur den Wert raus.
was mache ich falsch, braucht ihr quellcode?

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von eggy » 15.06.2015 21:47:22

Beschreib doch einfach mal was Du genau als Aufgabestellung hast. Ich nehme an, Du willst rausfinden unter welchem User ein bestimmtes Programm gestartet wurde oder mit welchen Rechten es grade läuft?

Benutzeravatar
Meillo
Moderator
Beiträge: 9235
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Meillo » 15.06.2015 21:53:17

Meinst du sowas:

Code: Alles auswählen

awk '/^Uid:/{print $2}' "$currentFile/status"
?
Use ed once in a while!

Rebekkakka
Beiträge: 7
Registriert: 15.06.2015 18:31:59

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Rebekkakka » 15.06.2015 22:20:36

ich muss mit perl den Befehl "ps axl" nachbilden, ich habe alles, bis auf Flags schon rausgefunden,
allerdings bekomme ich mit
...
# UID
$Uid=`awk '/^Uid/{print $2}' $currentFile/status`;
# PID
$Pid=`awk '/^Pid/{print $2}' $currentFile/status`;
# PPID
$PPid=`awk '/^PPid/{print $2}' $currentFile/status`;
...

diese Ausgabe, ich brauche aber nur die Werte und keine Labels, d.h. nur 1000 und nicht Uid: 1000 (auf dem Bild muss nur 0 stehen und nicht Uid: 0)
Bild

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Cae » 15.06.2015 22:37:21

Ist das Shell? Oder Perl? Falls Perl, warum machst du einen Haufen system()-Calls, anstatt einfach mit Hausmitteln zu arbeiten?

Ansonsten,

Code: Alles auswählen

$ awk '/^Pid:/{print$2}' /proc/$$/status
30252
$ 
tut hier ohne jegliche Unsauberkeiten wie Pid:-Praefixe o.oae.. Moeglicherweise geht da der Feldtrenner (-F) kaputt zwischendrin.

Edit: Ah, ich sehe das Problem:

Code: Alles auswählen

$ echo 'print(`awk "/^Pid:/{print$2}" /proc/808/status`)' | strace -fe execve perl | cat -A
...
[pid  2295] execve("/usr/bin/awk", ["awk", "/^Pid:/{print}", "/proc/808/status"], [/* 34 vars */]) = 0
...
Pid:^I808$
$ 
Das $2 expandiert im Perl-Parser. Da muessen ein bis drei Backslashes davor.


Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Rebekkakka
Beiträge: 7
Registriert: 15.06.2015 18:31:59

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Rebekkakka » 15.06.2015 22:43:00

Das ist perl, mit shell bekomme ich eine saubere Ausgabe, mit perl aber nicht.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Cae » 15.06.2015 22:44:07

Beachte meinen Edit, der sich vermutlich mit deinem Post zeitlich ueberlappt hat. Das Problem ist das mangelnde Escaping der Kommandozeile in den Backticks.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Rebekkakka
Beiträge: 7
Registriert: 15.06.2015 18:31:59

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Rebekkakka » 15.06.2015 23:13:10

Cae, Vielen Dank, mit einem "\" vor $2 könnte ich das Problem lösen.
Wie sollte ich mir das Wort "Expandieren" in diesem Kontext vorstellen ? - sorry verstehe nicht ganz.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Hilfeeeee! split & grep in awk umschreiben ohne splite

Beitrag von Cae » 16.06.2015 00:44:56

Rebekkakka hat geschrieben:Wie sollte ich mir das Wort "Expandieren" in diesem Kontext vorstellen ? - sorry verstehe nicht ganz.
Expandieren meint eigentlich dieses Verhalten:

Code: Alles auswählen

$ touch a
$ touch b
$ touch c
$ echo *
a b c
$ 
Da wird das * von der Shell zu a, b und c expandiert. Man hat also einen Platzhalter, welcher von einem Parser etc. durch Daten ersetzt wird.

$2 ist auch ein Platzhalter, der vor dem awk-Aufruf durch den Inhalt der Perl-Variablen $2 (die leer ist) ersetzt wird.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Antworten