2012-10-15 6 views
7

मैं एक टैब-डिलीमिट फ़ाइल में एक शीर्षलेख जोड़ना चाहता हूं लेकिन मुझे यकीन नहीं है कि लिनक्स में एक पंक्ति में इसे कैसे किया जाए।किसी टैब को सीमित फ़ाइल में एक शीर्षलेख जोड़ें

हम कहते हैं कि मेरी फाइल में है:

roger\t18\tcolumbia\tnew york\n 
albert\t21\tdartmouth\tnew london\n 
etc... 

और अब मैं एक ऐसा हेडर कहते जोड़ना चाहते हैं:

name\tage\tuniversity\tcity 

मैं क्या करना होगा कैसे है कि लिनक्स में एक पंक्ति में ? मैं अजीब, sed, बिल्ली, आदि के साथ ठीक हूँ हालांकि पर्ल के साथ बिल्कुल परिचित नहीं है।

+0

आप कैसे फ़ाइल की शुरुआत में पाठ/हेडर की लाइन रखने का अनुरोध करने रहे है? – newfurniturey

+0

हां। मैं देख सकता हूं कि आप पहले ही जवाब दे चुके हैं। धन्यवाद। – Dnaiel

उत्तर

12

"एपेंड" ऑपरेटर >> जैसे "प्रीपेन्ड" ऑपरेटर नहीं है, लेकिन आप एक temp फ़ाइल में हेडर लिख सकते हैं, इसके बाद अपनी फ़ाइल की सामग्री को temp-file में कॉपी कर सकते हैं, और इसे वापस ले जाएं:

echo -e "name\tage\tuniversity\tcity" | cat - yourfile > /tmp/out && mv /tmp/out yourfile 
+2

यह एक अच्छी तकनीक है, लेकिन अगर बिल्ली अपने इनपुट को देखने जा रही है तो आपको 'बिल्ली - yourfile' की आवश्यकता है। (यानी, आपको स्पष्ट रूप से बिल्ली के लिए तर्क के रूप में '-' देना होगा।) –

+0

@ विलियम पर्सेल आप बिल्कुल सही हैं - मेरे हिस्से पर टाइपो; मेरे लिए यह पकड़ने के लिए धन्यवाद! – newfurniturey

1

पहले हेडर सामग्री साथ एक फ़ाइल बनाने:

$ cat >header 
name^Iage^Iuniversity^Icity (return) 
^D 

फिर डेटा

$ cat header myfile >newfile 
$ mv newfile myfile 
8
$ { printf 'name\tage\tuniversity\tcity\n'; cat orig-file; } > new-file 

या

करने के लिए इसे पहले जोड़ें (जहां ^I टैब कुंजी है)
$ printf '1\ni\nname\tage\tuniversity\tcity\n.\nw\n' | ed -s orig-file 
6

व्यक्तिगत तौर पर मैं nano -w file.txt साथ जाना होगा ;-) (यानी सिर्फ एक पाठ संपादक का उपयोग, निश्चित रूप से नैनो)

होने की जरूरत नहीं है लेकिन अगर आप किसी कारण के लिए एक गैर-सहभागी वातावरण में इस करना चाहता था, आप concatenations के सभी प्रकार के लिए cat उपयोग कर सकते हैं:

echo $'name\tage\tuniversity\tcity' | cat - file.txt > file2.txt 

शीर्षलेख को प्रीपेड करेगा और आउटपुट को file2.txt में रखेगा। आप मूल फ़ाइल अधिलेखित करना चाहते हैं, तो आप

echo $'name\tage\tuniversity\tcity' | cat - file.txt > file2.txt; mv file{2,}.txt 

साथ यह कर सकते हैं या फिर इस प्रकार आप sed इस्तेमाल कर सकते हैं:

sed -i $'1 i\\\nname\tage\tuniversity\tcity' file.txt 

ध्यान दें कि मैं $'...' उपयोग कर रहा हूँ के हवाले से मेरे लिए \t उपयोग करने के लिए अनुमति देने के लिए नई लाइन का प्रतिनिधित्व करने के लिए टैब और \n का प्रतिनिधित्व करें (अन्य प्रतिस्थापन के बीच; अधिक के लिए बैश मैन पेज देखें)। इस प्रकार के उद्धृत स्ट्रिंग में, \\ एक शाब्दिक बैकस्लैश का प्रतिनिधित्व करता है। तो कार्यक्रम sed के लिए पारित वास्तव में

1 i\ 
name age  university  city 
+0

एक अतिरिक्त क्यू, मैं echo $ 'name \ tage \ tuniversity \ tcity' में एक चर नाम कैसे जोड़ूं। बिल्ली - file.txt> file2.txt। यानी, $ $ {$ {shellvar} \ t $ {shellvar2} \ tuniversity विविधता \ tcity 'echo। बिल्ली - file.txt> file2.txt। मैंने ऐसा करने की कोशिश की और बिल्कुल काम नहीं किया। – Dnaiel

+2

शैल चर केवल डबल कोट्स के भीतर विस्तारित होते हैं, इसलिए आपको उद्धरण शैली को मिश्रण करना होगा। सौभाग्य से बाश आपको एक दूसरे के खिलाफ सही प्रकार के उद्धृत तारों को चलाने की अनुमति देता है और यह तदनुसार उनके साथ जुड़ जाएगा। '" $ {shellvar} "$ '\ t'" $ {shellvar2} "$ '\ tuniversityiversity \ tcity'' –

+0

अच्छा, बहुत बहुत धन्यवाद! – Dnaiel

3
perl -i -lne 'if($.==1){print "newline\n$_"}else{print}' your_file 
0
cat <(head -1 theFileWithHeader) theFileWithoutHeader > newfile; 
mv newfile theFileWithoutHeader; 
+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/17888664) – Sree

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