2012-10-25 9 views
10

Używam awk w skrypcie bash i zrobić coś takiego:awk wydruku jest dodanie sterowania m znak na końcu linii

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

W pliku wyjściowym, jestem coraz control-M „^ Znak M na końcu każdej linii. Co jest nie tak?

+2

Twój plik wejściowy może zawierać^M. Jeśli tak, usuń ją stamtąd. – Guru

+1

Czy utworzyłeś plik danych na komputerze? Jego zakończenia linii to^M^J, podczas gdy Unix używa tylko^J. – Barmar

+4

Ustaw separator rekordów na CR-LF, tj. 'Awk -v RS = '\ r \ n' ...'. – Thor

Odpowiedz

11

Separator rekord zostanie automatycznie ustawiona na linii kończącej obecnego systemu, LF (\n) na systemach uniksowych, CR-LF (\r\n) na systemach MS i CR (\r) na Mac OS poprzedzających Mac OS X. Aby pracować z plikiem nagranym w systemie MS, należy odpowiednio ustawić separator rekordów, w tym przypadku:

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

Mac OS X jest systemem uniksopodobnym i używa końcówek linii '\ n'. Mac OS 9 nie był oparty na Uniksie i używał końcówek linii '\ r'. –

+0

@ JonathanLeffler: Masz rację, dziękuję za poprawkę. – Thor

Powiązane problemy