कैसे जाग में अंतरिक्ष या टैब के साथ क्षेत्रों को अलग करने के लिए


51

खेलते समय awkमैं निष्पादित करने के लिए आया था:

ls -la >> a.txt ; awk {'print $5  $1'} a.txt ;

यह आउटपुट दे रहा है जैसे:

53277-rw-------
52347-rw-------

आउटपुट के इन दो दोस्तों के बीच मुझे कैसे जगह मिल सकती है?


1
एक सलाह के रूप में, आपको आउटपुट को पार्स नहीं करना चाहिए ls। यह आपको जल्दी या बाद में पीठ में काटेगा।
gniourf_gniourf

जागने में, दो तारों को print $5 $1
समेटने के लिए


2
@ टोकन और करीबी मतदाता, लिंक किए गए डुप्लिकेट एक डुप्लिकेट नहीं है। वे पहले से ही जानते हैं कि खेतों को आधार से कैसे प्रिंट करें ( awk {'print $5 $1'} a.txt)। वे पूछ रहे हैं कि फ़ील्ड # 1 और फ़ील्ड # 5 के बीच एक स्थान कैसे रखा जाए।
कोस

जवाबों:


72

बस लाइन को बदलो

ls -la >> a.txt ; awk {'print $5 "        " $1'} a.txt ;

यह रिक्त स्थान के साथ आउटपुट प्रिंट करना चाहिए।

उम्मीद है की यह मदद करेगा।

संपादित करें:

जैसा कि McNisse द्वारा सुझाया गया है आप प्रिंटफ का उपयोग कर सकते हैं, जो आपको अच्छा आउटपुट स्वरूप प्रदान करेगा

ls -la >> a.txt ; awk {'printf ("%5s\t%s\n", $5, $1)'} a.txt ;

4
printfसमारोह विशेष रूप से यदि आप संख्या स्वरूपित करना चाहते हैं, बेहतर नियंत्रण प्रदान करता है। printf("%s\t%s\n", $5, $1)
मैकनिसे

क्या उपरोक्त उत्तर में कोई टाइपो है? क्या 5sमतलब हैawk {'printf ("%5s\t%s\n", $5, $1)'}
विशाल

66

एक और अजीब-विशिष्ट तकनीक, "आउटपुट फ़ील्ड विभाजक" का उपयोग करें

ls -la | awk -v OFS='\t' '{print $5, $1}'

यहां अल्पविराम महत्वपूर्ण है।


यह काम करता है लेकिन $1
loretoparisi

8

टैब प्राप्त करने का एक सरल तरीका है:

awk {'print $5"\t"$1'}

5

मुझे पता है कि यह एक पुराना धागा है, लेकिन मैं अभी सीख रहा हूं और इन पोस्टों को मददगार पाया। मेरा सबसे अच्छा समाधान था कि आप के लिए चर के बीच रिक्त स्थान डालने के लिए gawk का उपयोग करें।

ls -la | gawk '{print $1, $9}'

3
-1: कुछ भी नया नहीं है। gawk, mawkया कोई अन्य awk, वे सभी स्थान सम्मिलित करते हैं यदि आप अल्पविराम का उपयोग करते हैं, जो कि यह उत्तर कहता है।
मूरू

1
होना चाहिए ls -la | awk '{print $1, $9}'। जैसा कि मुरू ने कहा कि gawkजरूरी नहीं है।
निक क्रॉफोर्ड

1

तर्कों के बीच जगह बनाने के लिए, बस जोड़ें " ", जैसे awk {'print $5" "$1'}

हालांकि यह कमांड के आउटपुट को पार्स करने के लिए अनुशंसित नहीं है , क्योंकि यह विश्वसनीय नहीं है और आउटपुट मनुष्यों के लिए है, स्क्रिप्ट के लिए नहीं। इसलिए वैकल्पिक कमांड जैसे या का उपयोग करें ।lsfindstat

यहाँ GNU का उपयोग करके उदाहरण दिया गया है stat:

$ stat -t *
001.txt 23 8 81a4 501 20 1000004 242236402 1 0 0 1460260387 1460260239 1460260239 1460260194 4096
7c1c.txt 21 8 81a4 501 20 1000004 242236595 1 0 0 1460261322 1460260486 1460260486 1460260486 4096

जो आपको मशीन-फ्रेंडली आउटपुट (ट्रिक रूप में) प्रिंट करेगा, जिससे आपको ठीक वही मिल सकता है जिसकी आपको आवश्यकता है। फिर -cविशिष्ट प्रारूप का उपयोग करें, या उपयोग करें awk, cutया readसही कॉलम प्राप्त करने के लिए।

stat --helpआगे के विकल्पों के लिए जाँच करें। संशोधन के दिन को प्रिंट करने के लिए, इस उदाहरण को देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.