शेल कमांड का उपयोग करके मैं एससीआई फ़ाइल की पहली एन लाइनों को कैसे हटा सकता हूं?


92

मेरे पास कई फाइलें हैं जिनमें पहले 5-10 लाइनों में एएससीआई टेक्स्ट की जानकारी है, इसके बाद मैट्रिक्स की अच्छी जानकारी है। एक शेल स्क्रिप्ट में, मैं पाठ की इन पहली कुछ पंक्तियों को हटाना चाहता हूं ताकि मैं दूसरे कार्यक्रम में शुद्ध मैट्रिक्स जानकारी का उपयोग कर सकूं। मैं इसे करने के लिए bash शेल कमांड का उपयोग कैसे कर सकता हूं?

यदि यह कोई मदद करता है, तो मैं RedHat और एक Ubuntu linux सिस्टम का उपयोग कर रहा हूं।

जवाबों:


143

जब तक फ़ाइल एक सिमलिंक या हार्डलिंक नहीं है, तब तक आप sed, tail या awk का उपयोग कर सकते हैं। नीचे उदाहरण है।

$ cat t.txt
12
34
56
78
90

एसईडी

$ sed -e '1,3d' < t.txt
78
90

तुम भी एक अस्थायी फ़ाइल के बिना यथा-स्थान एसईडी का उपयोग कर सकते हैं: sed -i -e 1,3d yourfile। यह कुछ भी प्रतिध्वनित नहीं करेगा, यह केवल फ़ाइल को इन-प्लेस संशोधित करेगा। यदि आपको परिणाम को किसी अन्य कमांड पर पाइप करने की आवश्यकता नहीं है, तो यह आसान है।

पूंछ

$ tail -n +4 t.txt
78
90

awk

$ awk 'NR > 3 { print }' < t.txt
78
90

8
तुम भी एक अस्थायी फ़ाइल के बिना यथा-स्थान एसईडी का उपयोग कर सकते हैं: sed -i -e 1,3d yourfile। यह कुछ भी प्रतिध्वनित नहीं करेगा, यह केवल फ़ाइल को इन-प्लेस संशोधित करेगा। यदि आपको परिणाम को किसी अन्य कमांड पर पाइप करने की आवश्यकता नहीं है, तो यह आसान है।
यानिक गिरौद

1
धन्यवाद @YanickGirouard, @IgnacioVazquezAbrams! तुम दोनों ने अभी-अभी मुझे अपने शोध पर एक टन श्रम बचा लिया है! :)
पॉल

2
@ श्वेतलाना sed -iविशेष रूप से। अधिकांश कार्यान्वयन केवल फ़ाइल को हटाते हैं और इसे एक नए के साथ बदल देते हैं, जो लिंक के लिए काम नहीं करता है क्योंकि आप मूल को उसके अन्य स्थान पर छोड़ते हैं।
jw013

6
कैसे समझाने के बारे में '1,3d', +4, et.c. माध्यम? प्रश्न n लाइनों के लिए था, लेकिन आपने यह नहीं बताया कि n क्या है (जैसा कि स्पष्ट रूप से n आपके उदाहरणों में 2 है, हालांकि यह स्पष्ट नहीं है कि एक noob के लिए n को बदलने के लिए क्या बदलना है)
Robin Manoli

3
यह एक अस्थायी फ़ाइल का उपयोग करता है इसलिए 100% उपयोग डिस्क स्थान के लिए बहुत उपयोगी नहीं है। एक समाधान होना दिलचस्प होगा जो इसे "इन-प्लेस" का शाब्दिक अर्थ देता है।
Shai

10

sed -i '1,3d' file.txt

यह file.txt से पहली 3 लाइन को हटाता है।


6

यदि सारणीबद्ध रेखाएँ वह हैं जिनमें एक टैब वर्ण है:

grep '␉' <input_file >output_file

( शाब्दिक टैब वर्ण होने के नाते) या समकक्ष

sed -n '/␉/p' <input_file >output_file

एक bash / ksh / zsh स्क्रिप्ट में, आप $'\t'एक टैब के लिए लिख सकते हैं , जैसे grep $'\t'या sed -n $'/\t/p'

यदि आप फ़ाइल की शुरुआत में 10 लाइनों को खत्म करना चाहते हैं:

tail -n +11 <input_file >output_file

(ध्यान दें कि यह +1110 लाइनों को खत्म करना है, क्योंकि +11इसका मतलब है "लाइन 11 से शुरू करें" और पूंछ संख्या 1 से) या

sed '1,10d' <input_file >output_file

लिनक्स पर, आप -iफाइलों को संशोधित करने के लिए GNU sed के विकल्प का लाभ उठा सकते हैं :

sed -i -n '/\t/p' *.txt

या आप शेल लूप और अस्थायी फ़ाइलों का उपयोग कर सकते हैं:

for x in *.txt; do
  tail -n +11 <"$x" >"$x.tmp"
  mv "$x.tmp" "$x"
done

या यदि आप फ़ाइलों को जगह में बदलना नहीं चाहते हैं, लेकिन इसके बजाय उन्हें एक अलग नाम दें:

for x in *.txt; do
  tail -n +11 <"$x" >"${x%.txt}.data"
done

3
"सारणीबद्ध" का अर्थ आमतौर पर "तालिका में सुंदर-मुद्रित" होता है, न कि "टैब वर्णों के साथ इंडेंट"।
इग्नासियो वाज़केज़-अब्राम्स

@ इग्नासियोवेज़ज़-अब्राम्स मुझे पता है। सुंदर मुद्रित तालिका कभी-कभी टैब वर्णों का उपयोग करती है, जो संरेखित स्तंभों की तुलना में आसान है। बेशक, अगर पॉल ने एक नमूना इनपुट दिया, तो मैं एक बेहतर मैचर दे सकता था।
गिल्स

2

आप पूर्व मोड में विम का उपयोग कर सकते हैं:

ex -sc '1d5|x' file
  1. 1 पहली पंक्ति में जाएँ

  2. 5 5 लाइनों का चयन करें

  3. d हटाना

  4. x सहेजें और बंद करें


0

इको "a \ nb" | sed '1d' # पहली पंक्ति को हटाता है

बिल्ली सूची sed '1d'> list.csv # list.txt पढ़ें और पहली पंक्ति के बिना list.csv लिखें

अन्य उपयोगी कमांड:

grep '^ |' # पहला चरित्र पाता है (पाइप |)

sed 's / | // g' # पाइप को हटाता है

sed 's / // g' # स्थान मिटाता है


0

प्रतिशत के हिसाब से

bashलाइनों की पूर्ण संख्या के बजाय प्रतिशत संख्या का उपयोग करके किसी फ़ाइल को साफ़ करने के लिए उपयोग करना :

sed -i -e 1,$( printf  "$((`cat php_errors.log | wc -l` * 75 /100 ))" )d php_errors.log

बाहर देखो क्योंकि यह आदेश विनाशकारी हो सकता है क्योंकि यह एक प्रतिलिपि बनाने के बिना सामग्री को जगह में हटा देता है।

यह उल्लिखित फ़ाइल से पहले 75% लाइनों को हटा देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.