Awk reverse beiden Zeilen und Worten
Ich bin neue Programmiersprachen und Zeug
so habe ich eine Rückseite mit awk alle Linien und auch alle die Wörter in die Zeilen aus einer Datei und drucken Sie Sie aus.
"File1" auf Rückseite:
aa bb cc
foo tun, als
Und die Ausgabe drucken von "File1" sollten dies sein:
wie foo
cc bb aa
Habe ich versucht, dieses für-Wort rückwärts in jeder Zeile:
for (i=NF; i>1; i--) printf("%s ",$i); printf("%s\n",$1)
aber wenn ich drucken möchte, der umgekehrten Zeilen habe ich, um dies zu tun
{a[NR]=$0
}END{for(i=NR; i; i--) print a[i]}
Ich muss arbeiten mit zwei Dateien mit diesem Befehl im terminal:
awk -f commandFile FileToBePrinted
Das problem ist, ich bin beginer in all das, und ich weiß nicht, wie zu kombinieren die zwei.
Danke!
- +1 für gut präsentiert, Frage (die erste Zeit auch!). Gute Formatierung, Beispiel für die Eingabe, Ausgabe UND code, der nicht funktioniert! Gute show und keep posting!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kev ' s Lösung sieht eine Umkehrung der text in jedem Wort. Sie Beispiel für die Ausgabe nicht zeigen, aber seine wichtigste Punkt ist eine Funktion verwenden.
Haben Sie den code, den Sie benötigen, brauchen Sie nur neu zu ordnen es ein wenig.
Läuft
Ausgabe
Gab es ein paar kleinere änderungen, die ich gemacht habe, mit
n=split(line, tmpLine) ... print tmpLine[j]
ist, ist eine Allgemeine Methode zum Parsen einer Zeile der Eingabe in einer Funktion drucken Sie es aus. Ich glaube nicht, dass die $1 vars Umfang von einem übergebenen Wert aus einem array (Ihre a[i] - Wert), also habe ich es aufgeteilt..tmpLine[j]. Ich fand auch, dass die 'ich' - variable aus Abschnitt am ENDE wurde gehalten im Rahmen der Funktionreverse
, so dass ich geändert, dass j keine Verwechslungen der situation.Musste ich ein paar Dinge heraus, so unten ist der debug-version, die ich verwendet.
Wenn du gehst, um Zugang zu glotzen, dann wirst du gut tun, zu lernen, wie Sie den debugger verwenden, die verfügbar ist. Wenn Sie mit awk/gawk/nawk auf Systemen ohne einen debugger, dann ist das eine Methode für das Verständnis, was Los ist in Ihrem code. Wenn Sie umleiten Ihre Programme die Ausgabe in eine Datei oder pipe, UND wenn Sie system unterstützt "/dev/stderr" - notation, die Sie drucken konnte, die debug-Zeilen, d.h.
Einige Systeme haben andere Bezeichnungen für den Zugriff auf stderr, so dass, wenn Sie tun so viel, es lohnt sich, um herauszufinden, was verfügbar ist.
Ich hoffe, das hilft.
verwenden tac zum umkehren der Zeilen der Datei, dann awk-eine Umkehrung der Wörter.
Könnte man auch so etwas wie Perl, die list-Umkehr-Funktionen built-in: