2012-10-22 5 views
5

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

मैं इस माहौल में कुछ नया हूं, लेकिन मैं इस समस्या का कोई फायदा नहीं उठा रहा हूं।

मैं इस तरह के रूप एसईडी आदेश का उपयोग कर की कोशिश की है, लेकिन यह

sed -e '941572,941574d' filenameX > newfilenameY 

मैं भी

sed -e '941573d' filenameX > newfilenameY 

की कोशिश की है काम प्रतीत नहीं होता है फिर भी 'newfilenameY' फ़ाइल और मूल फ़ाइल 'filenameX' में अभी भी उस पंक्ति को शामिल किया गया है जिसे मैं हटाने की कोशिश कर रहा हूं। यह एक फास्टक फ़ाइल है, हालांकि मुझे नहीं लगता कि इससे कोई फर्क नहीं पड़ता। जैसे मैंने कहा कि मैं यूनिक्स के लिए नया हूं इसलिए शायद मुझे sed कमांड मिला है

+0

मैंने अभी इस दृष्टिकोण (बहुत छोटी फ़ाइल के साथ) की कोशिश की है और यह सब काम करने लगता है। शायद आप फिर से जांच करना चाहते हैं? –

+0

मेरे पास, कुछ बार –

+0

है, मैं सुझाव दूंगा कि आप 'sed -ne' 941573p 'filenameX' चलाएं ताकि यह देखने के लिए कि क्या रेड लाइन नंबरों की गणना कर रहा है, जिस तरह से आप इसकी अपेक्षा करते हैं। –

उत्तर

6

d लाइन/रेखा हटा देता है। तो आपका दूसरा दृष्टिकोण काम करता है।

$ sed '941573d' input > output 

लांग उदाहरण:

% for i in $(seq 1000000) 
do 
echo i >> input 
done 
% wc -l input 
1000000 input 
% sed '941573d' input > output 
% wc -l output 
999999 output 
% diff -u input output          :(
--- input  2012-10-22 13:22:41.404395295 +0200 
+++ output  2012-10-22 13:22:43.400395358 +0200 
@@ -941570,7 +941570,6 @@ 
941570 
941571 
941572 
-941573 
941574 
941575 
941576 

लघु उदाहरण:

% cat input 
foo 
bar 
baz 
qux 
% sed '3d' input > output 
% cat output    
foo 
bar 
qux 
+2

ओपी क्या कर रहा है उससे अलग कैसे है, इसके अलावा, जो (मुझे लगता है) कोई फर्क नहीं पड़ता? –

+0

@BrianAgnew कोई फर्क नहीं पड़ता। ओपी काम का दूसरा दृष्टिकोण। –

+0

मैंने सोचा कि –

0

यहाँ एक फ़ाइल से एक या अधिक पंक्तियों को निकालने का तरीका है।

सिंटेक्स:

sed '{[/]<n>|<string>|<regex>[/]}d' <fileName>  
sed '{[/]<adr1>[,<adr2>][/]d' <fileName> 
/.../=delimiters 
n = line number 
string = string found in in line 
regex = regular expression corresponding to the searched pattern 
addr = address of a line (number or pattern) 
d = delete 
0

मैं 1000000 लाइनों के साथ एक परीक्षण फ़ाइल उत्पन्न करने और अपने sed -e '941573d' filenameX > newfilenameY की कोशिश की और यह लिनक्स पर ठीक काम किया।

शायद हमारे पास कुछ और गलतफहमी है। रेखा संख्या एक से शून्य है, शून्य नहीं। यदि आप शून्य से गिना जाता है तो आपको लगता है कि लाइन 941572 गुम थी।

क्या आपने diff filenameX newfilenameY को आजमाया है? इससे किसी भी अप्रत्याशित परिवर्तन को उजागर किया जाएगा।

मुझे FASTQ प्रारूप के बारे में बहुत कुछ पता नहीं है, लेकिन क्या आप वाकई टेक्स्ट फ़ाइल लाइन नंबरों के बारे में बात कर रहे हैं, और अनुक्रम संख्या नहीं?

4096 बाइट्स की सामान्य लाइन लंबाई सीमा है, क्या आपकी कोई भी लाइन उस से अधिक है? (यह असंभव है, लेकिन मैंने सोचा कि यह सवाल लायक है)।

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