Alles, was ich will, ist die letzten zwei Spalten gedruckt.So drucken Sie die letzten zwei Spalten mit awk
Antwort
Sie können Verwendung von variablen NF
machen, die auf die Gesamtzahl der Felder in dem Eingabedatensatz festgelegt ist:
awk '{print $(NF-1),"\t",$NF}' file
dies setzt voraus, dass Sie zumindest 2 Felder.
Sie brauchen ein Komma - seit Wir sind heute pingelig: Raum verkettet Felder, Komma trennt Felder in einer Druckanweisung. Dadurch werden die beiden Felder zusammengeführt. –
Jetzt drucken Sie "field-OFS-tab-OFS-field".Es sollte "awk" sein {print $ (NF-1) "\ t" $ NF} 'Datei' oder 'awk' {print $ (NF-1), $ NF} 'Datei' oder 'awk' BEGIN {OFS = "\ t"} {print $ (NF-1), $ NF} 'Datei'. –
awk '{print $NF-1, $NF}' inputfile
Hinweis: Dies funktioniert nur, wenn mindestens zwei Spalten vorhanden sind. Auf Aufzeichnungen mit einer Spalte erhalten Sie eine falsche "-1 column1"
gaffen mit zeigt das Problem:
gawk '{ print $NF-1, $NF}' filename
1 2
2 3
-1 one
-1 three
# cat filename
1 2
2 3
one
one two three
ich nur setzen gaffen auf Solaris 10 M4000: So gawk ist die cuplrit auf dem $ NF-1 vs. $ (NF-1) Thema. Nächste Frage was sagt POSIX? pro:
http://www.opengroup.org/onlinepubs/009695399/utilities/awk.html
Es gibt keine Richtung der einen oder der anderen Seite. Nicht gut. gawk impliziert Subtraktion, andere awks implizieren Feldnummer oder Subtraktion. hmm.
Die ersten beiden Zeilen der Beispieleingabedatei sind nicht hilfreich, da sie dieselbe Ausgabe mit _either_-Verhalten erzeugen. Können Sie bitte bestätigen, dass sich Solaris awk in diesem Fall NICHT wie ein Gähnen verhält? – mklement0
Wie für Ihre Verbindung zu der awk-Spezifikation: Das anekdotische Argument für die Verwendung von $ (NF-1) ist, dass die beiden Beispiele zur Berechnung der Feld-Index in der Spezifikation beide diese Form verwenden: $ (NF-1) und '$ (NF + 2)'. Dann gibt es den Abschnitt "Ausdrücke in awk", in dem "$ expr" eine viel höhere Priorität als "expr - expr" hat. Da "NF" ein Ausdruck selbst ist, sollte "$ NF-1" zu "($ NF) -1" ausgewertet werden. Selbst wenn es schließlich tatsächlich awk-Implementierungen gibt, die '$ NF-1' als '$ (NF-1)' auswerten, ist die Lektion, die hier gelernt wird, dass die Verwendung von '$ (NF-1)' das sichere und ist tragbare Wahl. – mklement0
@jim mcnamara: versuchen Sie mit Klammern für um NF
, ich. e. $(NF-1)
und $(NF)
anstelle von $NF-1
und $NF
(funktioniert unter Mac OS X 10.6.8 für FreeBSD awk
und gawk
).
echo '
1 2
2 3
one
one two three
' | gawk '{if (NF >= 2) print $(NF-1), $(NF);}'
# output:
# 1 2
# 2 3
# two three
Wir hatten schon() früher gedacht. Ich dachte, wir diskutierten darüber, woher das ursprüngliche alte awk-Verhalten kam. –
+1 für eine Antwort mit expliziten '$ (NF-1)' - die zumindest portabler ist als '$ NF-1'; es ist definitiv weniger zweideutig. '$ (NF)' ist Overkill, obwohl - nur '$ NF' reicht. Der Schutz gegen Zeilen mit weniger als 2 Spalten ist ebenfalls sinnvoll, da bei einspaltigen Zeilen der erste Spaltenwert * zweimal * und bei nullspalten - also leeren Zeilen - der Befehl awk aufgrund von ein Versuch, auf ein Feld mit Index -1 zuzugreifen. – mklement0
- 1. AWK Skript für zwei Spalten
- 2. So richten Sie die letzten zwei Spalten einer Tabelle mit CSS aus
- 3. Verwenden von awk zum Drucken von Paaren von Datensätzen mit überlappenden Wertebereich zwischen zwei Spalten
- 4. Subtructing n Anzahl der Spalten aus zwei Dateien mit AWK
- 5. AWK drucken nicht leere Spalten aus CSV (und umfassen Kopfzeile)
- 6. Drucken Variablen getrennt durch "-" mit awk
- 7. Awk zum Drucken von übereinstimmenden Zeilen aus zwei unsortierten Dateien
- 8. Entfernen Sie die letzten zwei Zeichenketten!
- 9. So schreiben Sie awk -F Befehle
- 10. So drucken Sie ausgewählte Datagridview-Spalten in vb.net?
- 11. 2 Spalten Vergleich mit awk Skript
- 12. Passing zwei awk Spalten in eine Zeit lang Lesebefehl
- 13. Wie Variable in awk drucken
- 14. Übereinstimmende zwei Felder zwischen zwei Dateien AWK
- 15. So drucken Sie alle Spalten in einem Datenreader
- 16. So drucken Sie * cube
- 17. So entfernen Sie die Spalten, die NA in Linux enthält
- 18. Wie Text und Zahlen spalten awk mit
- 19. So drucken Sie eine einzelne Zelle in einer CSV-Datei mit Bash-Skript oder awk
- 20. mit awk Skript zum Drucken der letzten n Zeilen einer Textdatei
- 21. bestimmte Spalten aus einem Datensatz mit nur ‚sed‘ ohne ‚awk‘
- 22. So drucken Sie den ASCII-Wert eines Zeichens nur mit dem einfachen awk
- 23. Mit awk Spalten in Textdateien ausrichten?
- 24. Entfernen Sie die letzten zwei Zeichen aus den Spaltennamen aller Spalten im Dataframe - Pandas
- 25. So erhalten Sie die Zeilennummer der letzten Zeile beim Drucken eines Excel-Blattes (EPPlus)
- 26. So verwenden Sie die letzten Boost-Versionen mit Travis CI
- 27. Concatenate zwei Spalten und fügen Sie die fusionierte Spalte
- 28. Drucken Zeilen Nummer 2, 4, 8, 16 ... mit awk
- 29. Awk Muster entspricht immer letzten Datensatz?
- 30. Drucken Raum, wenn die Zeilen in awk die gleichen sind
Nicht ganz sicher, warum dies 87 Upvotes hat, kann es sicherlich mit einem Beispiel zumindest verbessert werden. – Arj