केवल दो फ़ाइलों की पहली पंक्ति को कैसे अलग किया जाए?


17

मैं पूरी फाइल के विपरीत केवल दो फाइलों की पहली पंक्ति को अलग करना चाहता हूं। मुझे यह कैसे करना है? मुझे केवल पहली पंक्ति के लिए एक समाधान की आवश्यकता है, लेकिन यदि आप उन पंक्तियों की संख्या निर्दिष्ट कर सकते हैं जो बहुत बेहतर उत्तर होगी।

तो अंतर निम्नलिखित दो फ़ाइलों के बीच कोई अंतर नहीं लौटाएगा:

a
1
2

तथा:

a
3
4

आपके लिए वो काम किया ...?
nddwaller

@nerdwaller युप, स्वीकृत।
gsingh2011 3

ठंडी फलियां। अन्य विकल्पों के बारे में सोचने की कोशिश कर रहा था, सौभाग्य से यह आवश्यक नहीं है।
nerdwaller

जवाबों:


26

हेयर यू गो:

diff <(head -n 1 file1) <(head -n 1 file2)

(यह कुछ भी नहीं तो कभी भी वापस आ जाएगी)।

diff <(head -n 2 file1) <(head -n 2 file2)

Returns:
2c2
< 1
---
> 3

आप उस चीज़ को करने के लिए एक स्क्रिप्ट में शामिल कर सकते हैं।

#!/bin/bash

fileOne=${1}
fileTwo=${2}
numLines=${3:-"1"}

diff <(head -n ${numLines} ${fileOne}) <(head -n ${numLines} ${fileTwo})

उस का उपयोग करने के लिए, बस स्क्रिप्ट को निष्पादन योग्य बनाएं chmod +x nameofscript.shऔर फिर निष्पादित करने के लिए, ./nameofscript.sh ~/file1 ~/Docs/file2वह डिफ़ॉल्ट # 1 पर लाइनों को छोड़ देता है, यदि आप चाहते हैं कि उस कमांड के अंत में एक संख्या और अधिक हो।

(या आप अपनी स्क्रिप्ट में -f1 file1 -f2 file2 -n 1 के साथ स्विच कर सकते हैं, लेकिन मैं अपने सिर के शीर्ष को उस के लिए केस स्टेटमेंट की याद नहीं दिलाता)।

headसुझाव के अनुसार शुरुआत से # लाइनों का रिटर्न -n। यदि आप रिवर्स करना चाहते थे, तो यह होगा tail -n ${numLines}(पूंछ अंत में लाइनों की संख्या से होती है)।

5/10/16 संपादित करें:

यह बैश (और संगत गोले) के लिए विशिष्ट है। यदि आपको इसे किसी और चीज़ से उपयोग करने की आवश्यकता है:

bash -c 'diff <(...) <(...)'

जब मैं दो निर्देशिकाओं को अलग करने की आवश्यकता होगी तो पुनरावर्ती के लिए यह काम कैसे होगा?
lanoxx

diff -r dir1 dir2निर्देशिकाओं के लिए @lanoxx , इसे सीमित करने के लिए आप शायद इसे कुछ और करना चाहते हैं। यदि आपके पास विशिष्ट प्रश्न हैं तो एक नया प्रश्न खोलें और यहां एक लिंक दें।
nerdwaller 15

अच्छी तरह से मूल रूप से एक ही सवाल सिर्फ पुनरावर्ती: केवल दो निर्देशिकाओं में सभी फाइलों के लिए (पहली एन लाइनों को छोड़कर) पहली एन लाइनें।
lanoxx

@lanoxx जैसा मैंने कहा, एक नया प्रश्न करें और इसे लिंक करें। यह सुपर उपयोगकर्ता समुदाय के लिए कुछ अन्य उपयोगकर्ता के प्रश्न के दायरे का विस्तार करने के बजाय सबसे अच्छा अभ्यास है।
nerdwaller 16

1
@Veridian आप किस शेल का उपयोग कर रहे हैं? यह बैश विशिष्ट है, इसलिए आपको कॉल करना पड़ सकता हैbash -c "diff <(...) <(...)"
nerdwaller

-1

diff -U (n की पंक्तियों) file1 file2


1
सुपर उपयोगकर्ता में आपका स्वागत है! क्या आप -Uतर्क पर थोड़ा विस्तार कर सकते हैं ? :)
बर्टिएब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.