2010-08-18 15 views

उत्तर

0

अल्पविरामों से सभी टैब के बजाय ऐसे।

संभवतः s/\t/,/g जैसे रेगेक्स के साथ, यदि आपके पास कोई उद्धृत फ़ील्ड नहीं है।

या, आप जानते हैं, एक्सेल आपके लिए ऐसा कर सकता है। या आर या कुछ भी जो एक टीएसवी फ़ाइल में ले सकता है।

-2

यूनिक्स में:

sed -i -e 's/\t/,/g' filename 
23

आप उपयोग कर सकते हैं एसईडी के रूप में:

sed 's/\t/,/g' input_file > output_file 

यह अपरिवर्तित इनपुट फ़ाइल रखेंगे और परिवर्तन के साथ एक नई फ़ाइल output_file पैदा करेगा।

क्या आप -i विकल्प का उपयोग कर सकते हैं inplace परिवर्तन करने के लिए sed करने के लिए एक नई फ़ाइल बनाने के बिना इनपुट फ़ाइल ही बदलना चाहते हैं:

sed -i 's/\t/,/g' input_file 
+3

यह करता है ओएस एक्स में काम नहीं करते हैं, ऐसा लगता है कि यह पत्र "टी" से मेल खाता है और टैब नहीं। – Mike

+0

ओएसएक्स पर \ t टाइप करने के बजाय, ctrl + v दबाएं और फिर टैब – TheAppchemist

+0

@ कोडडिक्ट दबाएं, अगर मैं पूछ सकता हूं, 'जी' के लिए 'g' क्या है? – Les

0

यह सामान्य आसान सवाल-सभी भाषाओं बात है? ठीक है, यहां मेरा हैकेल समाधान है:

main = interact (unlines . replTab . lines) where 
    replTab l = l  >>= (\line -> 
    "\"" ++ line "\"" >>= \char -> 
    case char of 
     '\t' -> "\",\"" 
     '"' -> "\"\"" 
     _ -> [char] 
    ) 

परीक्षण नहीं किया गया है, लेकिन काम करना चाहिए।

पीएस: अन्य सभी समाधान अल्पविराम से बचने के बारे में नहीं जानते हैं।

2

यह भी पर्ल के साथ प्राप्त किया जा सकता है: आप में फ़ाइल को संपादित करना चाहते हैं तो
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 रिक्त स्थान, टैब या नई-पंक्तियों सहित किसी भी खाली स्थान के चरित्र का प्रतिनिधित्व करता है और प्रतिस्थापन स्ट्रिंग में उपयोग नहीं किया जा सकता है।

28

ओएसएक्स का उत्तर अलग है।

मैकोज़ sed अभिव्यक्ति में समझ में नहीं आता है।

फिर आप टैब (How can I insert a tab character with sed on OS X? देखें) ctrl + वी का उपयोग करके टैब sed खोज पैटर्न में शाब्दिक डालने के लिए है

sed 's/ /,/g' input_file > output_file 
+2

ओएसएक्स पर आप जीएनयू sed का उपयोग कर सकते हैं जो '\ t' को समझता है। [यह सवाल] (http://stackoverflow.com/questions/30003570/how-to-use-gnu-sed-on-mac-os-x) इसे इंस्टॉल करने के तरीके के बारे में है। – janosdivenyi

3
मन में

भालू अल्पविराम के कई जायके देखते हैं कि अलग-अलग मूल्य फ़ाइल। चूंकि आपने एक निर्दिष्ट नहीं किया है, इसलिए मैं यूटीएफ -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; 
0

एसईडी -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

संबंधित मुद्दे