2014-10-20 11 views
9

File1:बैश पेस्ट आदेश उत्पादन स्वरूपण

1 
2 

File2:

1 2 3 
4 5 

file3:

1  1 2 3 x x x 
2  4 5  yy yy 
       zz 
:

x x x 
yy yy 
zz 

paste file1 file2 file2 मुझे एक टैब अलग उत्पादन देता है

1 1 2 3 x x x 
2 4 5 yy yy 
    zz 

मैं इसे नीचे की तरह हैं::

1 1 2 3 x x x 
2 4 5 yy yy 
     zz 

किसी भी विचार करता है, तो यह संभव है या मैं किसी अन्य आदेश की कोशिश करनी चाहिए

paste -d" " file1 file2 file3 मुझे उत्पादन देता है?

+0

के बारे में क्या करता है, तो 'file2' की दूसरी पंक्ति' 4 5 6 7 8' है? वांछित आउटपुट क्या है? क्या लक्ष्य प्रति इनपुट फ़ाइल कॉलम है? –

+0

लक्ष्य अंतरिक्ष को एक डेलीमीटर के रूप में उपयोग करना है और फिर भी प्रत्येक फ़ाइल में मूल स्वरूपण को बनाए रखना है। क्षमा करें, मैं करें 2 बारे में अपने प्रश्न नहीं मिला। – Ramesh

+0

तो आपकी समस्या हल हो गई थी? यह आपकी टिप्पणियों से स्पष्ट नहीं है। – fedorqui

उत्तर

5

एसईडी का इस्तेमाल कर सकता के बाद टैब

paste file file2 file3 | sed 's/\t/ /' 

1 1 2 3 x x x 
2 4 5 yy yy 
     zz 

दूर करने के लिए यहाँ एक सामान्य प्रयोजन awk स्क्रिप्ट है कि किसी भी स्वरूपण के साथ फ़ाइल के किसी भी नंबर पर काम करेगा।

awk ' 
    {x=ARGIND;a[x]=a[x]>(b=length($0))?a[x]:b} 
    {F[FNR,x]=$0} 
    END{ 
      for(q=1;q<=FNR;q++) 
      { 
        for(i=1;i<=ARGC;i++) 
        { 
        printf("%-"a[i]"s ",F[q,i]) 
        }print "" 
      } 
    }' file{1,2,3,4) 
+0

क्या होगा यदि फाइलों में ईओएल पर टैब हैं? – lynxlynxlynx

+0

नहीं, अप्रयुक्त डिलीमीटर का उपयोग करके बॉक्स की तरह क्षैतिज ढेर बनाएगा। – lynxlynxlynx

+0

@ जिडर, हाँ, यह वही है जो मैं चाहता था। असल में, मैंने स्पेस के साथ टैब को प्रतिस्थापित करने की कोशिश की, लेकिन अंत में एक "जी" ध्वज का उपयोग किया, जिसने मेरे आउटपुट को गड़बड़ कर दिया। मैं अब आपके समाधान का उपयोग कर रहा हूँ। धन्यवाद। – Ramesh

2
बस तुम अकेले उदाहरण से

, यह तो पहले आपको फ़ाइलें 1 और 2 में शामिल होने, फिर फ़ाइल को 3 के साथ शामिल होने कि है, लेकिन एक विशेष सीमांकक है, जो आप एक अंतरिक्ष के लिए बाद में बदल देंगे साथ की कोशिश कर सकते लगता है।

untested है उदाहरण:

paste -d" " file1 file2 | paste -d'|' - file3 | sed 's,|, ,g' 

यहाँ मैं | इस्तेमाल किया है, लेकिन आप कुछ तुम्हें पता है का उपयोग करना चाहिए यकीन है कि के लिए डेटा अर्थात भी अधिक अस्पष्ट ˘ की तरह कुछ में दिखाई नहीं देगा। एक हैक का थोड़ा सा, लेकिन काम करना चाहिए।

सिर्फ दो फ़ाइलों के लिए:

paste -d'¤' file1 file2 | sed 's,¤, ,g' 
+0

वास्तव में, मैं पेस्ट आदेश पैदा कर रहा हूँ, और एक चर pastecmd को यह बताए, और $ {pastecmd} के रूप में यह क्रियान्वित करने, इसलिए इस विधि मेरे लिए उपयुक्त नहीं है। फाइलों की संख्या या कम से कम एक हो सकता है। – Ramesh

+1

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

+0

मैंने कोशिश की, लेकिन अब मेरे पास एक और मुद्दा है। जब मैं सिंटैक्स $ {pastecmd} का उपयोग करके जेनरेट कमांड निष्पादित करता हूं, तो पेस्ट कमांड सोचता है कि | एक और इनपुट फ़ाइल है।मैंने इसे बचने की कोशिश की, लेकिन कोई भाग्य नहीं। मैं पेस्ट कमांड झंडे का पता लगाने के बजाय पसंद करता हूं, और यह देख सकता है कि यह प्राप्त किया जा सकता है। आपके समय के लिए धन्यवाद। – Ramesh

1

क्या यह ऐसी चीज है जिसे आप ढूंढ रहे हैं?

$ more file{1,2,3,4} | cat 
:::::::::::::: 
file1 
:::::::::::::: 
1 
2 
:::::::::::::: 
file2 
:::::::::::::: 
1 2 3 
4 5 6 7 8 
:::::::::::::: 
file3 
:::::::::::::: 
x x x 
yy yy 
zz 
:::::::::::::: 
file4 
:::::::::::::: 
a a a 
bb bb bb 
c c cc 
d d d 
$ paste file{1,2,3,4} | sed -e 's/\t/ \t/g' | column -t -s$'\t' 
1 1 2 3  x x x a a a 
2 4 5 6 7 8 yy yy bb bb bb 
       zz  c c cc 
         d d d 
+0

नहीं, मुझे प्रत्येक फाइल के बीच एक ही स्थान में परिवर्तित करने के लिए टैब की आवश्यकता है। मुझे लगता है, मैं बिना किसी झंडे के पेस्ट कमांड का उपयोग करके आपके जैसा ही आउटपुट प्राप्त कर सकता हूं। – Ramesh

3

paste दो बार मेरे लिए बनाता है:

$ paste <(paste -d" " f1 f2) f3 
1 1 2 3 x x x 
2 4 5 yy yy 
     zz 
+0

यह अधिक फ़ाइलों या लाइनों की अलग-अलग लंबाई के लिए कैसे काम करेगा? –

+0

इसका अध्ययन किया जाना चाहिए, लेकिन यह सवाल के दायरे से बाहर है। यह अच्छा है कि आपने इसे अपने उत्तर में शामिल किया, लेकिन मुझे सभी उत्तरों को सामान्यीकृत करने की आवश्यकता नहीं दिखाई दे रही है: डी – fedorqui

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