2016-10-26 4 views
5

मैं एक बैश स्क्रिप्ट पर काम कर रहा हूं, और मैं एक तरफ दो फाइलों को प्रिंट करना चाहता हूं। एक फ़ाइल आईपीवी 4 पते से भरा है और दूसरा आईपीवी 6 पते से भरा है। मैंने कोशिश की,बाश: एक साथ दोनों फाइलों को एक साथ प्रदर्शित करें

pr -mtw $WIDTH $FILE1 $FILE2 

लेकिन यह आउटपुट काट दिया।

┌────┤IPV4├─────┬─────────────────┤IPV6├────────────────┐ 
224.0.0.1  2001:0db8:0000: 
192.0.2.128  ff02::1 
192.0.2.128  2001:0db8:0000: 
192.0.2.128  :: 
       2001:0db8:0000: 
       2001:db8:0:0:0: 
       2001:db8::ff00: 
       0000:0000:0000: 
       ::1 
       fe80:: 
       ::ffff:192.0.2. 
       ::192.0.2.128 

मैं भी कोशिश की,

paste $FILE1 $FILE2 | awk '$1=$1' OFS='\t ' 

और उत्पादन किया गया था,

┌────┤IPV4├─────┬─────────────────┤IPV6├────────────────┐ 
224.0.0.1 2001:0db8:0000:0042:0000:8a2e:0370:7334 
192.0.2.128 ff02::1 
192.0.2.128 2001:0db8:0000:0000:0000:ff00:0042:8329 
192.0.2.128 :: 
2001:0db8:0000:0000:0000:ff00:0042:8329 
2001:db8:0:0:0:ff00:42:8329 
2001:db8::ff00:42:8329 
0000:0000:0000:0000:0000:0000:0000:0001 
::1 
fe80:: 
::ffff:192.0.2.128 
::192.0.2.128 

मैं, उत्पादन कुछ की तरह बनना चाहता हूँ

┌────┤IPV4├─────┬─────────────────┤IPV6├────────────────┐ 
224.0.0.1  2001:0db8:0000:0042:0000:8a2e:0370:7334 
192.0.2.128  ff02::1 
192.0.2.128  2001:0db8:0000:0000:0000:ff00:0042:8329 
192.0.2.128  :: 
       2001:0db8:0000:0000:0000:ff00:0042:8329 
       2001:db8:0:0:0:ff00:42:8329 
       2001:db8::ff00:42:8329 
       0000:0000:0000:0000:0000:0000:0000:0001 
       ::1 
       fe80:: 
       ::ffff:192.0.2.128 
       ::192.0.2.128 

File1:

224.0.0.1 
192.0.2.128 
192.0.2.128 
192.0.2.128 

करें 2:

2001:0db8:0000:0042:0000:8a2e:0370:7334 
ff02::1 
2001:0db8:0000:0000:0000:ff00:0042:8329 
:: 
2001:0db8:0000:0000:0000:ff00:0042:8329 
2001:db8:0:0:0:ff00:42:8329 
2001:db8::ff00:42:8329 
0000:0000:0000:0000:0000:0000:0000:0001 
::1 
fe80:: 
::ffff:192.0.2.128 
::192.0.2.128 

नोट प्रत्येक पंक्ति के आरंभ में एक जगह नहीं है। कोई विचार?

+1

क्या आप कोशिश के लिए अलग-अलग फ़ाइलों की सामग्री को अलग-अलग साझा कर सकते हैं? – Inian

+0

क्या आप इनपुट फाइलें दिखा सकते हैं? या उनमें से एक उदाहरण? 'पेस्ट' मेरे लिए काम करता है, लेकिन मुझे यकीन नहीं है कि आपके पास इनपुट के रूप में क्या है। –

+0

आप अंतरिक्ष के साथ या इसके बिना अंतिम आउटपुट चाहते हैं? – Inian

उत्तर

1

यह ठीक काम करता है

paste "$FILE1" "$FILE2" | awk -F'\t' '{printf("%-16s%s\n", $1, $2)}' 
2

awk, tr और GNU paste आदेश का उपयोग: -

$ paste file1 file2 | awk -v FS='\t' '{printf("%-15s %s\n",$1,$2)}' | \ 
      awk '{sub(/^/, " ", $0)}1' 

224.0.0.1  2001:0db8:0000:0042:0000:8a2e:0370:7334 
192.0.2.128  ff02::1 
192.0.2.128  2001:0db8:0000:0000:0000:ff00:0042:8329 
192.0.2.128  :: 
       2001:0db8:0000:0000:0000:ff00:0042:8329 
       2001:db8:0:0:0:ff00:42:8329 
       2001:db8::ff00:42:8329 
       0000:0000:0000:0000:0000:0000:0000:0001 
       ::1 
       fe80:: 
       ::ffff:192.0.2.128 
       ::192.0.2.128 

आप पिछले 2 एक के साथ awk पहुंचाया, यकीन है कि वास्तव में यह कैसे करना है नहीं था अनुकूलन कर सकते हैं। अन्यथा, यह काम करता है!

+0

देखें, समय का आउटपुट वही है। – xtonousou

+0

मैंने 'tr' के बिना कमांड को अपडेट किया है जो समय में सुधार कर सकता है, लेकिन देरी की मात्रा गंभीरता से गंभीर है? – Inian

+0

जब आपके पास कोड की बहुत सारी लाइनें हैं, तो आप सबसे तेज़ विधि का उपयोग करने पर विचार करते हैं। मेरे सवाल का जवाब देने के लिए शुक्रिया। – xtonousou

1

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

paste -d, file1 file2 | column -s',' -n -t 

paste आदेश विभाजक , साथ लाइन द्वारा दोनों फ़ाइल लाइन में शामिल हो जाएगा।

कॉलम कमांड , को रिक्त स्थान से सही जगहों से प्रतिस्थापित करेगा (विकल्प -t के साथ)। -n खाली कॉलम भरने के लिए column पर कह रहा है। नोट -n विकल्प डेबियन विशिष्ट है।

+0

'कॉलम: अमान्य विकल्प - 'एन', मेरे पास इसका परीक्षण करने के लिए कोई डेबियन-आधारित मशीन नहीं है। – xtonousou

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