यदि इनपुट में केवल दो कॉलम थे, तो मैंने उपयोग करने का सुझाव दिया होगा 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