2016-06-01 8 views
-1

[TRIVIAL] [gelöst]awk/gawk scheint auf Ergebnisspalten zu überschreiben

tl: dr - DOW CRLF gemacht, als ob awk schlecht benommen zu fühlen; trivialer Fehler!

Ich bin nicht sicher, warum awk/gawk so verhält. Irgendwelche Hinweise? Haben Sie jemals awk-Ergebnisse gesehen, die die Spalten im Terminal überschrieben haben? Ich sehe das auf nur einer Maschine; Überall sonst funktioniert das Zeug gut! Nicht sicher, ob es das Terminal ist, das sich schlecht benimmt oder irgendetwas anderes. Ein stty sane scheint auch nicht zu helfen. Hat jemand eine ähnliche Sache gesehen?

$ cat in.txt 
2132088 AAA_WEB_50181_552222195-1 
2110665 AAA_WEB_50177_547796499-2 
2157591 AAA_WEB_50181_551310844-1 
2117370 AAA_WEB_50178_549250104-1 
2109777 AAA_WEB_50180_551512637-1 
2112704 AAA_WEB_50179_410838823-13 
2116984 AAA_WEB_50178_549463801-2 
2119511 AAA_WEB_50179_550076677-2 
2122008 AAA_WEB_50180_551679428-1 
2124984 AAA_WEB_50177_548026293-1 
$ awk '{print $2 " " $1}' in.txt 
213208850181_552222195-1 
211066550177_547796499-2 
215759150181_551310844-1 
211737050178_549250104-1 
210977750180_551512637-1 
211270450179_410838823-13 
211698450178_549463801-2 
211951150179_550076677-2 
212200850180_551679428-1 
212498450177_548026293-1 
$ cat /etc/issue.net 
Ubuntu 14.04.4 LTS 
$ gawk '{print $2 " " $1}' in.txt 
213208850181_552222195-1 
211066550177_547796499-2 
215759150181_551310844-1 
211737050178_549250104-1 
210977750180_551512637-1 
211270450179_410838823-13 
211698450178_549463801-2 
211951150179_550076677-2 
212200850180_551679428-1 
212498450177_548026293-1 
$ gawk -W version 
GNU Awk 4.0.1 
Copyright (C) 1989, 1991-2012 Free Software Foundation. 

Screenshot: awk or terminal - misbehaviour

+3

DOS-Leitungsabschluss? – tripleee

+0

@triplee - yep! Ich habe es gerade herausgefunden! Vielen Dank! – raghava

Antwort

3

Wie von tripleee, das Problem wahrscheinlich auf DOS Linie Terminator ist, eine einfache Lösung könnte sein, die Sonderzeichen zu entfernen.

cat in.txt | tr -dc '[:print:]\n' | gawk '{print $2 " " $1}' 

In dem obigen Beispiel kann tr -dc '[:print:]\n' nur die druckbaren Zeichen aus der Eingabedatei, bevor es zu awk Fütterung.

+0

Genau! Das ist mir auch aufgefallen. Lief ein dos2ux und dann hat es behoben. Hätte das kommen sehen sollen! : D – raghava

0

Das Problem mit dem Wagenrücklauf werden kann (\r), die am Ende der Linien, wenn die Datei von einer DOS-ähnlichen Umgebung kommt.

Eine gawk einzige Lösung wäre. mit tr und ihn an awk zur Verarbeitung

gawk '{printf "%s %s\n",gensub(/\r$/,"",-1,$2),$1}' in.txt 
Verwandte Themen