2010-08-30 11 views
12

मेरे पास दो फाइलें हैं जिन्हें मैं एक साथ बिल्ली बनाना चाहता हूं। हालांकि, पहली फ़ाइल की अंतिम पंक्ति और अंतिम फ़ाइल की पहली पंक्ति को छोड़ा जाना चाहिए।एक दूसरे के बाद दो फाइलों को बिल्ली कैसे लगाएं लेकिन क्रमशः आखिरी/पहली पंक्ति को छोड़ दें?

मुझे यकीन है कि यह यूनिक्स शैल (या बल्कि, सिगविन) में किया जा सकता है। पर कैसे?

+2

हम वास्तव में, एक scriptingOverflow साइट .... – leppie

+1

@leppie जरूरत है हम में से कुछ का मानना ​​है कि पटकथा के रूप में संकलन :-) – paxdiablo

उत्तर

15
$ head --lines=-1 file1 > res 
$ tail --lines=+2 file2 >> res 
3

आप का उपयोग कर सकते हैं:

head -n -1 file1 && tail -n +2 file2 

सिर एक फ़ाइल की पहली लाइनों पता चलता है, परम -n फ़ाइल के पहले n लाइनों से पता चलता है, लेकिन अगर आप डाल एक - नंबर से पहले, यह सब चलता अंतिम एन लाइनों को छोड़कर फ़ाइल।

पूंछ है अनुरूप ..

बेहतर संदर्भ के लिए

:

आदमीhead

आदमीtail

+0

पूंछ +1 पहली पंक्ति में शामिल हैं के रूप में ज्यादा प्रोग्रामिंग है। यह +2 होना चाहिए। – Frank

+0

हाँ, मैंने पोस्ट किया है और फिर परीक्षण किया है: पी – Marco

+0

आश्चर्यजनक रूप से, 'पूंछ-एन -1' का समान प्रभाव है 'पूंछ-एन + 2' – bastibe

1

निम्नलिखित प्रतिलेख से पता चलता है कि यह कैसे प्राप्त करने के लिए:

pax> cat file1.txt 
1.1 
1.2 
1.3 
1.4 
1.5 

pax> cat file2.txt 
2.1 
2.2 
2.3 
2.4 
2.5 

pax> head --lines=-1 file1.txt ; tail --lines=+2 file2.txt 
1.1 
1.2 
1.3 
1.4 
2.2 
2.3 
2.4 
2.5 

head आदेश देना एक नकारात्मक गणना अंत तक दूर तक जाती है। इसी तरह, + से शुरू होने वाली गिनती tail को अंत से लाइनों की एक निश्चित संख्या के बजाय उस रेखा से शुरू करने का कारण बनती है।

1
head -n -1 file1 

अंतिम पंक्ति को छोड़कर file1 में सभी लाइनों को प्रिंट करेगा।

tail -n +2 file2 

पहली पंक्ति को छोड़कर file2 में सभी लाइनों प्रिंट होगा। के रूप में अनुरोध

head -n -1 file1 ; tail -n +2 file2 
2
awk 'FNR>2{print p}{p=$0}' file1 file2 

स्पष्टीकरण::

दो के रूप में कम्बाइन

एफ एन आर वर्तमान फ़ाइल की वर्तमान रिकार्ड संख्या कार्रवाई की जा रही है। प्रत्येक पुनरावृत्ति की शुरुआत में, रेखा "पी" चर में संग्रहीत है, लेकिन यह अभी तक मुद्रित नहीं है। चूंकि रिकॉर्ड संख्या 3 तक पहुंच जाती है, चर "पी" मुद्रित होता है, जिसमें रिकॉर्ड 2 होता है। इसका मतलब है दूसरी पंक्ति। जैसे ही अजीब फ़ाइल के अंत तक पहुंचता है, अंतिम पंक्ति मुद्रित नहीं होती है और फिर यह अगली फाइल पर जाती है।

head -n -1 file1 

आदेश ऊपर उत्पन्न करता है:

+0

ghostdog74 हमें यहां क्या चल रहा है के बारे में बताएं :) – codaddict

+0

क्या यह नहीं है _both_ फ़ाइलों से पहली और आखिरी पंक्तियों को हटा दें? प्रश्न पहली फ़ाइल की अंतिम पंक्ति और दूसरी फ़ाइल की पहली पंक्ति के लिए था, है ना? – paxdiablo

1

मैं निम्न आदेश (पर मैक ओएस एक्स 10.7.5 किसी टर्मिनल विंडो में एक bash खोल चलाने में अधिक विशेष रूप से) पर अपने मैक का उपयोग करने में सक्षम नहीं हूँ निम्नलिखित त्रुटि संदेश:

head: illegal line count -- -1 

ऐसा लगता है कि -n पैरामीटर के लिए नकारात्मक मान सिर के मैक ओएस एक्स संस्करण में स्वीकार नहीं किए जाते हैं।हालांकि, अगर आप के बजाय sed का उपयोग कर सकते हैं:

sed -e '$d' file1 

0

मैं अक्सर सिर के लिए sed का उपयोग [ "पूंछ +2 करें 2 -n" के रूप में मैक ओएस एक्स पर ऊपर वर्णित काम करने के लिए प्रकट होता है] | पूंछ कार्रवाई:

{ sed '$d' file1; sed '1d' file2; } > combined 
संबंधित मुद्दे