• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Mit awk einen String herausfiltern

Hallo,

ich würde gerne mit "awk" zum Beispiel vom Kommando "dir" eine bestimmt Spalte herauslesen und diese Spalte soll dann in eine Datei umgeleitet werden.

Zum Beispiel:

#> dir | awk ....

drwxr-xr-x 2 root root 4096 Nov 18 13:33 .fvwm
drwx------ 2 root root 4096 Dec 28 14:18 .gconf
drwx------ 2 root root 4096 Dec 28 14:20 .gconfd
drwx------ 2 root root 4096 Dec 7 08:18 .gnome
drwx------ 3 root root 4096 Dec 7 08:18 .gnome2
drwx------ 2 root root 4096 Dec 7 08:18 .gnome2_private
drwx------ 2 root root 4096 Nov 18 14:03 .gnupg
drwxr-xr-x 2 root root 4096 Nov 18 13:33 .kbd

... und die Spalte mit der Urzeit soll in die Datei "Uhrzeit.txt" umgeleitet werden. Soll dann so aussehen:

13:33
14:18
14:20
...

Kann mir dabei jemand helfen?

Vielen Dank für eure Hilfe!!!
 
des rätsels lösung:

dir | awk ' { print $7 } ' > uhrzeit.txt

der befehl "dir" listet alle dateien aus dem aktuellen arbeitsverzeichnis auf, Beispiel (Denkstütze):

-rw-r--r-- 1 tux users 28 2006-01-03 18:39 dest~
-rw-r--r-- 1 tux users 0 2006-01-03 18:41 test
-rw-r--r-- 1 tux users 31 2006-01-03 18:43 uhrzeit.txt
-rw-r--r-- 1 tux users 19 2006-01-03 18:41 uhrzeit.txt~

aber mit
awk ' { print $7 } '
wird nur die spalte 7, also die uhrzeit rausgefiltert und mit
>
in die datei uhrzeit.txt umgeleitet.

Das hast du doch gesucht oder???
 
Hi,

danke für die schnelle Antwort!

Und wie kann ich die herausgefilterte Spalte in einen weiteres Befehlszeilenkommando einfügen?
Zum Beispiel:

dir | awk ' { print $7 } ' ...weitere Parameter > befehle.sh

... die Datei sollte dann so aussehen:

touch file_12:34 2> error.txt
touch file_23:12 2> error.txt
...
Also es soll vor und hinter der herausgefilterten Spalte etwas neues hinzugefügt werden. Diese Datei (befehle.sh) möchte ich dann ausführen.

Danke für die Hilfe!

(Ich weis, dass dies bei diesem Beispiel eigentlich keinen Sinn hat, brauche aber diese Syntax bei etwas anderem ...)
 
hmmm,

ich bin glaub ein bisschen zu blöd um dein beispiel zu verstehen :wink: , aber wenn du in die datei "befehle.sh" weiteren text übergeben möchtest, dann geht das irgendwie so:

dir | awk '{ print "touch file_" $7 " 2> error.txt" }' > befehle.sh

die datei befehle.sh sieht dann bei mir so aus:

touch file_ 2> error.txt
touch file_19:01 2> error.txt
touch file_19:01 2> error.txt
touch file_19:01 2> error.txt

und die erste zeile nervt mich dabei das kommt wohl davon, dass er die erste zeile der ausgabe "dir" auch bearbeitet in der steht:

insgesamt ......

und dort gibts keine spalte 7! drum übernimmt er die zeile ohne uhrzeit. dafür weiß ich jetzt auf die schnelle auch keine lösung. vielleicht gibts mit "ls" eine option mit der man das ausblenden kann. (man ls)
p. s. "dir" = "ls -l"

aber jetzt gibts erstmal essen :)
 
no problem.

aber änder doch noch über "edit" die überschrift deines ersten beitrags ab, da es jetzt nix mit SED zu tun hatte und das thema erledigt ist: [gelöst]

gruß
 
Oben