में एक टैब अलग की गई फ़ाइल मैं csv फ़ाइल में एक टैब अलग की गई फ़ाइल कनवर्ट करना चाहते हैं परिवर्तित करने के लिएकैसे अल्पविराम से अलग फ़ाइल
किसी को भी मदद कर सकते हैं मुझे
में एक टैब अलग की गई फ़ाइल मैं csv फ़ाइल में एक टैब अलग की गई फ़ाइल कनवर्ट करना चाहते हैं परिवर्तित करने के लिएकैसे अल्पविराम से अलग फ़ाइल
किसी को भी मदद कर सकते हैं मुझे
अल्पविरामों से सभी टैब के बजाय ऐसे।
संभवतः s/\t/,/g
जैसे रेगेक्स के साथ, यदि आपके पास कोई उद्धृत फ़ील्ड नहीं है।
या, आप जानते हैं, एक्सेल आपके लिए ऐसा कर सकता है। या आर या कुछ भी जो एक टीएसवी फ़ाइल में ले सकता है।
यूनिक्स में:
sed -i -e 's/\t/,/g' filename
आप उपयोग कर सकते हैं एसईडी के रूप में:
sed 's/\t/,/g' input_file > output_file
यह अपरिवर्तित इनपुट फ़ाइल रखेंगे और परिवर्तन के साथ एक नई फ़ाइल output_file
पैदा करेगा।
क्या आप -i
विकल्प का उपयोग कर सकते हैं inplace परिवर्तन करने के लिए sed करने के लिए एक नई फ़ाइल बनाने के बिना इनपुट फ़ाइल ही बदलना चाहते हैं:
sed -i 's/\t/,/g' input_file
यह सामान्य आसान सवाल-सभी भाषाओं बात है? ठीक है, यहां मेरा हैकेल समाधान है:
main = interact (unlines . replTab . lines) where
replTab l = l >>= (\line ->
"\"" ++ line "\"" >>= \char ->
case char of
'\t' -> "\",\""
'"' -> "\"\""
_ -> [char]
)
परीक्षण नहीं किया गया है, लेकिन काम करना चाहिए।
पीएस: अन्य सभी समाधान अल्पविराम से बचने के बारे में नहीं जानते हैं।
यह भी पर्ल के साथ प्राप्त किया जा सकता है: आप में फ़ाइल को संपादित करना चाहते हैं तो
perl -wnlp -e 's/\t/,/g;' input_file.txt > output_file.csv
:
पाइप करने के लिए एक नया आउटपुट फ़ाइल आप निम्नलिखित का उपयोग कर सकते करने के लिए परिणाम
perl -wnlpi -e 's/\t/,/g;' input_file.txt
कुछ संयोग से आप पाते हैं कि तुम क्या साथ काम कर रहे वास्तव में टैब, लेकिन इसके बजाय कई रिक्त स्थान नहीं है, तो आपको निम्न प्रत्येक occurren को बदलने के लिए उपयोग कर सकते हैं: जगह, आप मैं विकल्प आह्वान कर सकते हैं एक अल्पविराम से दो या अधिक रिक्त स्थान की ce:
perl -wnlpi -e 's/\s+/,/g;' input_file
ध्यान रखें कि \s
रिक्त स्थान, टैब या नई-पंक्तियों सहित किसी भी खाली स्थान के चरित्र का प्रतिनिधित्व करता है और प्रतिस्थापन स्ट्रिंग में उपयोग नहीं किया जा सकता है।
ओएसएक्स का उत्तर अलग है।
मैकोज़ sed
अभिव्यक्ति में समझ में नहीं आता है।
फिर आप टैब (How can I insert a tab character with sed on OS X? देखें) ctrl + वी का उपयोग करके टैब sed खोज पैटर्न में शाब्दिक डालने के लिए है
sed 's/ /,/g' input_file > output_file
ओएसएक्स पर आप जीएनयू sed का उपयोग कर सकते हैं जो '\ t' को समझता है। [यह सवाल] (http://stackoverflow.com/questions/30003570/how-to-use-gnu-sed-on-mac-os-x) इसे इंस्टॉल करने के तरीके के बारे में है। – janosdivenyi
भालू अल्पविराम के कई जायके देखते हैं कि अलग-अलग मूल्य फ़ाइल। चूंकि आपने एक निर्दिष्ट नहीं किया है, इसलिए मैं यूटीएफ -8 एन्कोडिंग में RFC-4180 प्रारूप मानूंगा, और टीएसवी समान होगा लेकिन कॉमा के बजाए टैब का उपयोग कर रहा हूं।
अनुभवहीन दृष्टिकोण बस एक अल्पविराम से हर टैब को बदलने के लिए होगा:
tr '\t' ,
यह नीचे गिर जाता है, तो कोई भी मान पहले से ही इसमें अल्पविराम, या अगर किसी भी एक उद्धृत टैब होते हैं। उद्धरण बनाए रखने के लिए आपको फ़ाइल को कम से कम पार्स करने की आवश्यकता होगी।
#!/usr/bin/perl -w
use Text::CSV;
my $tsv = Text::CSV->new({ sep_char => "\t", auto_diag => 2 });
my $csv = Text::CSV->new();
while (my $row = $tsv->getline(*ARGV)) {
$csv->print(STDOUT, $row) or die $csv->error_diag();
print $/;
}
$csv->error_diag() unless $tsv->eof;
एसईडी -e के/TAB_CHAR /,/जी 'data.tsv: इस तरह के एक पार्सर हाथ से रोलिंग के बजाय, यह इस तरह पर्ल के लिए Text::CSV
के रूप में, सरल स्पष्ट और अधिक पहले से ही लिखा एक का उपयोग करने के लिए लचीला है, > data.csv
मुश्किल हिस्सा कैसे, आदेश पंक्ति में टैब वर्ण दर्ज करने के लिए के लिए है: बस hist "Ctrl + V", फिर टैब
मैं अक्सर साथ mysql प्रश्नों के साथ इस का उपयोग करें - इस ब्लॉग पोस्ट में वर्णित ई पैरामीटर http://blog.modsaid.com/2013/12/exporting-data-from-remote-mysql.html
यह करता है ओएस एक्स में काम नहीं करते हैं, ऐसा लगता है कि यह पत्र "टी" से मेल खाता है और टैब नहीं। – Mike
ओएसएक्स पर \ t टाइप करने के बजाय, ctrl + v दबाएं और फिर टैब – TheAppchemist
@ कोडडिक्ट दबाएं, अगर मैं पूछ सकता हूं, 'जी' के लिए 'g' क्या है? – Les