2012-10-25 1 views
10

ich awk mit bin in einem Bash-Skript, und so etwas wie:awk Druck ist das Hinzufügen eines Steuer-m Zeichen am Ende der Zeile

awk -F, -v result_file=$2'{ 
print $2 $1 > result_file 
}' $data_file 

In der Ausgabedatei, erhalte ich einen Steuer-M ‚^ M'-Zeichen am Ende jeder Zeile. Was ist falsch?

+2

Ihre Eingabedatei enthält möglicherweise^M. Wenn ja, entfernen Sie es von dort. – Guru

+1

Haben Sie die Datendatei auf einem PC erstellt? Die Zeilenenden sind^M^J, während Unix nur^J verwendet. – Barmar

+4

Setzen Sie das Datensatztrennzeichen auf CR-LF, d. H. 'Awk -v RS = '\ r \ n' ...'. – Thor

Antwort

11

Die Datensatztrennzeichen wird vor dem Zeilenende des aktuellen Systems, LF (\n) auf dem UNIX-basierten Systemen, CR-LF (\r\n) auf MS-Systemen und CR (\r) auf Mac OS automatisch auf Mac OS X. Um eine auf einem MS-System aufgezeichnete Datei zu bearbeiten, müssen Sie in diesem Fall das Datensatztrennzeichen entsprechend einstellen:

awk -v RS='\r\n' ... 
+1

Mac OS X ist ein Unix-ähnliches System und verwendet '\ n' Zeilenenden. Mac OS 9 basierte nicht auf Unix und verwendete die '\ r' Zeilenendungen. –

+0

@ JonathanLeffler: Du hast recht, danke für die Korrektur. – Thor