कॉलम में टेक्स्ट को फ़ॉर्मेट करना


11

मेरे पास एक फ़ाइल है जिसमें दो कॉलम हैं जैसा नीचे दिखाया गया है (उदाहरण):

फ़ाइल 1:

John 1
Peter 2
Michael Rod 3
Su 7
Louise 9

मुझे इसे प्रारूपित करने की आवश्यकता है और मेरा अपेक्षित आउटपुट होना चाहिए:

फ़ाइल 1:

John        1
Peter       2
Michael Rod 3
Su          7
Louise      9

1
2 कॉलम कहां हैं
मार्क

दोनों आउटपुट एक जैसे प्रतीत होते हैं। क्या आप कृपया अपने प्रश्न पर अधिक जानकारी दे सकते हैं?

2
स्तंभों को कैसे परिभाषित किया जाता है? क्या नाम और संख्या के बीच एक टैब या कुछ अन्य चरित्र है? हम कैसे जान सकते हैं कि Michael Rod 32 कॉलम हैं और 3 नहीं?
terdon

2
नहीं, पाठ की छवियाँ पोस्ट न करें । मैं सिर्फ उस पाठ को कॉपी और पेस्ट करने जा रहा था, जो आपकी मदद करने में सक्षम हो, और अब मैं नहीं कर सकता।
Kusalananda

1
मित्तम और टेर्डन ने क्या कहा; क्या आप निर्दिष्ट कर सकते हैं, उदाहरण के लिए, यह अंतिम कॉलम है जिसे सबसे लंबी लाइन की चौड़ाई के लिए अनुमति देने की आवश्यकता है?
जेफ स्कालर

जवाबों:


18

यदि इनपुट में केवल दो कॉलम थे, तो मैंने उपयोग करने का सुझाव दिया होगा column -t। हालांकि यह काफी काम नहीं करता है, क्योंकि columnउपयोगिता किसी भी स्थान या टैब को कॉलम सीमांकक के रूप में मानेगी:

$ column -t file1
John     1      
Peter    2      
Michael  Rod  3 
Su       7      
Louise   9      

"माइकल रॉड" दो कॉलम हैं, ताकि एकल पंक्ति में अन्य पंक्तियों की तुलना में एक कॉलम अधिक हो, जो आउटपुट को गड़बड़ कर देता है।

हम अंतिम कॉलम से पहले एक टैब कैरेक्टर डालकर इसके चारों ओर काम कर सकते हैं और फिर columnएक सीमांकक के रूप में उपयोग (केवल) करते हैं:

$ awk '{ $NF = "\t" $NF; print }' file1 | column -t -s $'\t'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9

Awk में, NFफ़ील्ड (कॉलम) की संख्या है, और $NFअंतिम फ़ील्ड में डेटा है। मैं जिस स्क्रिप्ट का उपयोग कर रहा हूं , वह पूरी लाइन को प्रिंट करने से पहले, एक टैब कैरेक्टर को प्रीपे करके अंतिम फ़ील्ड के डेटा को संशोधित करता है।

यदि आपका शेल समझ में नहीं आता है $'\t', तो आप एक अन्य वर्ण चुन सकते हैं जो डेटा का हिस्सा नहीं है:

awk '{ $NF = "@" $NF; print }' file1 | column -t -s '@'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.