दूर तक आसान तरीका है tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
जिस तरह से यह काम करता है वह tr
दो तर्क लेता है - पात्रों के सेट को प्रतिस्थापित किया जाना, और उनका प्रतिस्थापन। इस मामले में हमारे पास केवल 1 वर्ण है। हम शेल ऑपरेटर के माध्यम से input.csv
इनपुट tr
की स्टडिन धारा को पुनर्निर्देशित करते हैं <
, और tr -d '"'
दोहरे उद्धरण चिह्नों को हटाने के लिए परिणामी आउटपुट को पाइप करते हैं।
लेकिन awk
यह भी कर सकते हैं।
$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
जिस तरह से यह काम करता है वह थोड़ा अलग है: awk प्रत्येक फ़ाइल लाइन को लाइन से पढ़ता है, प्रत्येक इन-लाइन स्क्रिप्ट है /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
। यहां हमारे पास कोई पैटर्न नहीं है, इसलिए इसका अर्थ है कि प्रत्येक पंक्ति के लिए कोडब्लॉक निष्पादित करना। gsub()
फ़ंक्शन का उपयोग एक पंक्ति के भीतर वैश्विक प्रतिस्थापन के लिए किया जाता है, इस प्रकार हम इसे कॉमा के साथ अंडरस्कोर को बदलने के लिए उपयोग करते हैं, और एक शून्य स्ट्रिंग के साथ दोहरे उद्धरण (प्रभावी रूप से चरित्र को हटाने)। 1
कोड ब्लॉक, जो चूक बस लाइन मुद्रण करने के लिए याद आ रही के साथ पैटर्न मैच के स्थान पर है, दूसरे शब्दों में कोडब्लॉक gsub()
काम करता है और 1
परिणाम प्रिंट करता है।
>
नई फ़ाइल में आउटपुट भेजने के लिए शेल पुनर्निर्देशन ( ) का उपयोग करें :
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv