2013-06-11 6 views
45

मैं इसस्तंभ द्वारा awk प्रकार का उपयोग कैसे करें 3

ip,hostname,user,group,encryption,aduser,adattr 

की तरह एक फ़ाइल (user.csv) उपयोगकर्ता के सभी कॉलमों का क्रम प्रिंट करना चाहते हैं,

मैं awk -F ":" '{print|"$3 sort -n"}' user.csv की कोशिश की है, यह नहीं है काम।

+6

'तरह आयकर, -k3 file' – Kevin

उत्तर

88

लगभग sort के बारे में कैसे।

sort -t, -nk3 user.csv 

जहां

  • -t, - , के रूप में अपने सीमांकक परिभाषित करता है।

  • -n - आपको संख्यात्मक प्रकार देता है। जोड़ा गया क्योंकि आपने इसे अपने प्रयास में जोड़ा है। यदि आपका उपयोगकर्ता फ़ील्ड केवल टेक्स्ट है तो आपको इसकी आवश्यकता नहीं है।

  • -k3 - फ़ील्ड (कुंजी) को परिभाषित करता है। उपयोगकर्ता तीसरा क्षेत्र है।

+0

मैं कैसे प्रकार 2 कॉलम का उपयोग कर सकते हैं? उदाहरण के लिए, मैं पहले कॉलम 6 द्वारा क्रमबद्ध करना चाहता हूं, और कॉलम 3 सेकंड द्वारा क्रमबद्ध करें। – user2452340

+0

सीएसवी में कॉमा युक्त उद्धृत स्ट्रिंग्स होने पर यह काम नहीं करेगा (जब तक कि आप जिस कॉलम को सॉर्ट करना चाहते हैं वह कॉमा-युक्त कॉलम से पहले नहीं है)। आपको अजीब के साथ पहले पास करना पड़ सकता है (एफपीएटी = "[^,] * | \" [^ \ "] * \" "और ओएफएस =" | "या कुछ अन्य डिलीमीटर जो आप सॉर्ट के साथ उपयोग कर सकते हैं) – davemyron

+1

@ user2452340 आप यह कर सकते हैं: 'sort -t, -nk3 filename.csv | sort -t, -nk6' - पहले यह कॉलम 3 द्वारा सॉर्ट करेगा, फिर कॉलम 6 द्वारा सॉर्ट करेगा, इसलिए कॉलम 6 को सही तरीके से सॉर्ट किया गया है और किसी भी पंक्तियों के लिए जहां कॉलम 6 समान है, उन्हें कॉलम 3 द्वारा क्रमबद्ध किया जाएगा। – Matthew

9
  1. उपयोग awk सामने यूजर आईडी डाल करने के लिए।
  2. सॉर्ट करें
  3. डुप्लिकेट उपयोगकर्ता आईडी को हटाने के लिए sed का उपयोग करें, मानते हैं कि उपयोगकर्ता आईडी में कोई रिक्त स्थान नहीं है।

    awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //' 
    
+0

यह बहुत उपयोगी है, विशेष रूप से यदि आपको सॉर्ट फ़ील्ड जोड़ने के लिए कॉलम को पार्स या गठबंधन करने की आवश्यकता है, तो केवल मूल पंक्ति को बनाए रखें। मैंने अजीब/विभाजित किया है ताकि दिनांक और समय फ़ील्ड को पार्स/गठबंधन किया जा सके। क्रमबद्ध करें, फिर हटाएं। – bejota

2
awk -F, '{ print $3, $0 }' user.csv | sort -nk2 

और उलटे क्रम,

awk -F, '{ print $3, $0 }' user.csv | sort -nrk2 
3

आप एक सीमांकक चुन सकते हैं, इस मामले में मैं पेट के चयन और स्तंभ संख्या एक प्रिंट, वर्णमाला के क्रम से क्रमबद्ध करने के लिए।

awk -f\: '{print $1|"sort -u"}' /etc/passwd 
+0

इसके -एफ नहीं, लेकिन अच्छा है –

4

इस कोशिश -

awk '{print $0|"sort -t',' -nk3 "}' user.csv 

या

sort -t',' -nk3 user.csv 
संबंधित मुद्दे