2016-07-20 9 views
0

Ich habe diesen Befehl awk '{print $1}' "$line" verwendet, um eine Datenspalte aus einer Datei zu erhalten, die folgendermaßen aussieht: (Unterstriche stellen Tabulator als Trennzeichen dar, Beispiel ist drei -Spalte Daten)awk Befehl: Wie unterscheidet man zwischen Leerzeichen und Tabulatoren?

Joe Jonas_____8_____45 
Cersei Lann_____4_____23 
Bo Tox_____6_____28 
Mis Ter Yo_____7_____89 

Wenn ich den Befehl ausführen, sagt die erste Spalte zu erhalten, wird der Ausgang zeigten jedoch, es wie folgt aus:

Joe 
Cersei 
Bo 
Mis 

Wie kann ich den Befehl macht das ignorieren Leerzeichen innerhalb der Daten der ersten Spalte?

Antwort

0

Ändern der Feldtrenner (-F) zur Lasche (n):

$ awk -F$'\t*' '{gsub(/ /,"_",$1); print $1,$2}' test2.in 
Joe_Jonas 8 
Cersei_Lann 4 
Bo_Tox 6 
Mis_Ter_Yo 7 

EDIT: Verwenden gsub auf den ersten Spaltenraum mit Unterstrich zu ersetzen.

+0

Ich würde gerne fragen, denn selbst wenn ich dies tue, sind meine Daten aufgrund des Vorhandenseins von Speicherplatz durcheinander. Wie kann ich es nach der Verwendung von awk durch Unterstrich ersetzen? –

+0

Sie müssen den '$ '\ t''-Bashismus nicht verwenden, wenn Sie awk mit -v oder -F verwenden. Awk versteht '' 'als Zeichen-Tab, wenn es als Argument für diese Optionen zur Verfügung gestellt wird. –

+0

@DalePin wrt 'meine Daten sind vermurkst ...' möchten Sie vielleicht eine neue Frage stellen, um Ihr Problem mit Leerzeichen zu beschreiben, da es keinen Grund für Leerzeichen gibt, die etwas durcheinander bringen könnten. –

Verwandte Themen