2012-10-25 6 views
10

मैं एक bash लिपि में awk उपयोग कर रहा हूँ के अंत में एक नियंत्रण मीटर चरित्र को जोड़ने और की तरह कुछ करना है:awk प्रिंट लाइन

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

आउटपुट फ़ाइल में, मैं एक नियंत्रण-एम 'हो रही है^प्रत्येक पंक्ति के अंत में एम 'चरित्र। गलत क्या है?

+2

आपकी इनपुट फ़ाइल में^एम हो सकता है। यदि ऐसा है, तो इसे वहां से हटा दें। – Guru

+1

क्या आपने पीसी पर डेटा फाइल बनाई थी? इसकी लाइन एंडिंग^एम^जे है, जबकि यूनिक्स सिर्फ^जे का उपयोग करता है। – Barmar

+4

सीआर-एलएफ में रिकॉर्ड विभाजक सेट करें, यानी 'awk -v आरएस =' \ r \ n '... '। – Thor

उत्तर

11

रिकॉर्ड विभाजक स्वचालित रूप से मैक ओएस पर यूनिक्स आधारित प्रणाली, एमएस सिस्टम पर सीआर वामो (\r\n) और सीआर (\r) से पहले पर, मौजूदा प्रणाली की लाइन-समाप्त होने के लिए निर्धारित है वामो (\n) मैक ओएस एक्स। इसलिए एक एमएस सिस्टम पर दर्ज की गई फाइल पर काम करने के लिए रिकॉर्ड विभाजक को उचित रूप से सेट करें:

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

मैक ओएस एक्स एक यूनिक्स जैसी प्रणाली है और '\ n' लाइन एंडिंग का उपयोग करता है। मैक ओएस 9 यूनिक्स पर आधारित नहीं था और '\ r' लाइन समाप्ति का उपयोग करता था। –

+0

@ जोनाथन लेफ्लर: आप सही हैं, सुधार के लिए धन्यवाद। – Thor