2012-10-25 9 views
10

Tôi đang sử dụng awk trong một kịch bản bash và làm điều gì đó như:awk in được thêm một nhân vật điều khiển m ở cuối dòng

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

Trong tập tin đầu ra, tôi nhận được một điều khiển-M '^ Ký tự M 'ở cuối mỗi dòng. Chuyện gì thế?

+2

Tệp đầu vào của bạn có thể chứa^M. Nếu vậy, hãy xóa nó khỏi đó. – Guru

+1

Bạn đã tạo tệp dữ liệu trên PC chưa? Kết thúc dòng của nó là^M^J, trong khi Unix chỉ sử dụng^J. – Barmar

+4

Đặt dấu phân tách bản ghi thành CR-LF, tức là 'awk -v RS =' \ r \ n '... '. – Thor

Trả lời

11

Các phân tích được tự động thiết lập để các dòng kết thúc của hệ thống hiện tại, LF (\n) trên hệ thống Unix-based, CR-LF (\r\n) trên các hệ thống MS và CR (\r) trên Mac OS trước Mac OS X. Vì vậy, để làm việc trên một tệp được ghi trên hệ thống MS, hãy đặt dấu phân tách bản ghi một cách thích hợp, trong trường hợp của bạn:

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

Mac OS X là một hệ thống giống Unix và sử dụng '\ n' kết thúc dòng. Mac OS 9 không dựa trên Unix và sử dụng kết thúc dòng '\ r'. –

+0

@JonathanLeffler: Bạn nói đúng, cảm ơn bạn đã sửa. – Thor