awk erzeugt Dateien im Dos-format

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Spagetti
Beiträge: 22
Registriert: 05.11.2005 10:41:34

awk erzeugt Dateien im Dos-format

Beitrag von Spagetti » 21.12.2005 15:51:05

hi

wenn ich eine Datei mit folgendem Code auslese bzw. erzeuge

Code: Alles auswählen

 awk '{print $2 $}' Quelle  >  Ziel.txt
dann ist die Datei Ziel.txt manchmal im dos-format, und manchmal im Unix. Das heißt der Zeilenumbruch ist jeweils anders.
Beispiel für Dosformat

Code: Alles auswählen

file tmp.objAtrNamePos.txt 
tmp.objAtrNamePos.txt: ASCII text, with CRLF line terminators
Beispiel für unixformat:

Code: Alles auswählen

file tmp.Cache
tmp.Cache:         ASCII text
Kann mir jemand sagen wie ich das in awk steuern kann, ich möchte nur Dateien im Unixformat haben

Danke

Spaggetti :-)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 21.12.2005 23:30:53

Ich habe in diesem Beispiel eine Inputdatei im Dosformat mit zwei Spalten verwendet. Je nachdem welche Spalte ich ausgebe, bekomme ich Dosformat oder Unixformat:

Code: Alles auswählen

gms@gms1:~$ awk '{print $1 }' x.txt >x2.txt
gms@gms1:~$ file x2.txt
x2.txt: ASCII text
gms@gms1:~$ awk '{print $2 }' x.txt >x2.txt
gms@gms1:~$ file x2.txt
x2.txt: ASCII text, with CRLF line terminators
gms@gms1:~$ awk '{print $2 "\n" }' x.txt >x2.txt
gms@gms1:~$ file x2.txt
x2.txt: ASCII text, with CRLF, LF line terminators
Du siehst also, daß das CR ("\r") Zeichen vom awk an die letzte Spalte angefügt. Wird diese ausgegeben, so erhält man wiederum einen Dosformat-Zeilenumbruch.
Beim letzten Beispiel habe ich zusätzlich ein "\n" ausgegeben und damit eine Mischform erhalten.

wenn du also nur Unixformat erzeugen möchtest, entfernst du am besten die unnötigen CR ("\r") Zeichen:

Code: Alles auswählen

gms@gms1:~$ awk '{ gsub(/\r/,""); print $2 }' x.txt >x2.txt
gms@gms1:~$ file x2.txt
x2.txt: ASCII text
Gruß
gms

Antworten