2012-04-30 12 views
15

का उपयोग करके केवल अलग-अलग पंक्तियों को प्रदर्शित करने के लिए कैसे करें मैं अलग फ़ाइल में diff का उपयोग करके केवल अलग-अलग पंक्तियां कैसे प्रदर्शित कर सकता हूं?diff (bash)

1;john;125;3 
1;tom;56;2 
2;jack;10;5 

एक फाइल नंबर 2 निम्नलिखित लाइनों में शामिल हैं:: निम्नलिखित में

1;john;125;3 
1;tom;58;2 
2;jack;10;5 

कैसे कर सकता हूँ के लिए हो

उदाहरण के लिए, फ़ाइल संख्या 1 पंक्ति है?

1;tom;58;2 
+0

'1 का क्या होगा अपरिवर्तित लाइनों और प्रिंट केवल बदल लाइनों के मुद्रण को दबा सकती हैं 2'? क्या दूसरी फ़ाइल हमेशा प्राथमिकता होनी चाहिए? क्या होना चाहिए यदि पहली फ़ाइल में दूसरी फ़ाइल में कोई रेखा न हो? –

उत्तर

29

a.txt:

1;john;125;3 
1;tom;56;2 
2;jack;10;5 

b.txt:

1;john;125;3 
1;tom;58;2 
2;jack;10;5 

उपयोग comm:

comm -13 a.txt b.txt 
1;tom;58;2 

comm को आदेश पंक्ति विकल्प बहुत सीधी-सपाट हैं :

-1 दबाने स्तंभ 1 (लाइनों File1 के लिए अद्वितीय)

-2 दबाने स्तंभ 2 (लाइनों करें 2 के लिए अद्वितीय)

-3 दबाने कॉलम 3 (कि दोनों फ़ाइलों में प्रदर्शित लाइनों)

+0

मुझे लगता है कि वह फाइल 2 के लिए अद्वितीय लाइनों को बनाए रखना चाहता है। – codaddict

+0

हां, मैंने देखा - मैंने पहली फ़ाइल को प्राथमिकता दी है। –

+3

पोस्ट को अपडेट किया है "ध्यान दें कि कमांड कमांड को दो फाइलों को क्रमबद्ध क्रम में होने की उम्मीद है।" –

10

मान लिया जाये कि आप केवल लाइनों 2 दायर करने के लिए अद्वितीय बनाए रखना चाहते आप कर सकते हैं:

comm -13 file1 file2 

ध्यान दें कि comm कमांड दो फ़ाइलों को क्रमबद्ध क्रम में होने की उम्मीद करता है। टॉम; 56;

3

का उपयोग समूह प्रारूप विनिर्देशक आप बदल के लिए

diff --changed-group-format="%>" --unchanged-group-format="" file1 file2

+0

यह स्ट्रिंग के लिए भी बहुत अच्छा काम करता है <(echo "$ string1") <(echo "$ string2") –

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