अंतिम कॉलम द्वारा संख्यात्मक प्रकार कैसे?


23

मेरे पास यह इनपुट है:

sdkxyosl 1
safkls 2
asdf--asdfasxy_asd 5
dkd8k  jasd 29
sdi44sw 43
asasd afsdfs 10
rklyasd 4

मुझे इस आउटपुट की आवश्यकता है:

sdi44sw 43
dkd8k  jasd 29
asasd afsdfs 10
asdf--asdfasxy_asd 5
rklyasd 4
safkls 2
sdkxyosl 1

इसलिए मुझे अंतिम कॉलम द्वारा लाइनों को क्रमबद्ध करना होगा।

मैं नहीं जानता कि एक पंक्ति में कितने स्तंभ हैं।

मैं अभी यह पता नहीं लगा सकता कि यह कैसे करना है। मेरे पास "पर्ल पॉवर" नहीं है। मेरे पास सिर्फ ~ औसत स्क्रिप्टिंग शक्तियाँ हैं जिनमें sed, awk, cut, आदि शामिल हैं।

क्या किसी को पता है कि यह कैसे करना है?

जवाबों:


34

निम्न कमांड लाइन awkfile.txt की प्रत्येक पंक्ति के अंतिम क्षेत्र को प्रीपेन्ड cutकरने के लिए उपयोग करती है, एक न्यूमेरिकल सॉर्ट करती है, फिर जोड़े गए फ़ील्ड को हटाने के लिए उपयोग करती है:

awk '{print $NF,$0}' file.txt | sort -nr | cut -f2- -d' '

omg ... मैं $ RS के बारे में नहीं जानता था !! आपका बहुत बहुत धन्यवाद!!!!!
लांसबाइनेस

@forcefsck: मुझे नहीं लगता कि यह केवल के साथ संभव है sort -kbegfieldजीएनयू में समारोह तरह सिर्फ शून्य हो जाने पर गिना जाता है। आपके सजने-संवरने-अघोषित (डीएसयू) दृष्टिकोण का सबसे अच्छा तरीका मुझे लगता है।
मिकेल

ब्याज से बाहर, क्यों $NF,$RSऔर क्या नहीं $NF,$0? मुझे नहीं पता $RSथा कि ऐसा किया था। (मुझे लगता है कि यह समान है $NF,$"\n", जो ऐसा ही करता है, लेकिन यह भी मुझे आश्चर्यचकित करता है।)
मिकेल

2
@ johnny8888, @forcefsck: awk में, $किसी भी अभिव्यक्ति द्वारा पीछा किया जा सकता है। " एक गैर-नकारात्मक पूर्णांक के अलावा किसी भी चीज़ का मूल्यांकन करने वाली फ़ील्ड संख्या अभिव्यक्ति का प्रभाव अनिर्दिष्ट है "। GNU awk (मेरे सिस्टम पर) एक स्ट्रिंग "\n"को शून्य जैसा मानता है। अन्य (जैसे ए, डब्ल्यू और के द्वारा मूल कार्यान्वयन) एक त्रुटि संदेश के साथ गर्भपात करते हैं। यदि RSएक अंक हो गया है, तो आपको किसी भी कार्यान्वयन पर संबंधित क्षेत्र मिलेगा। तो यह मत करो, का उपयोग करें $0
गिल्स एसओ- बुराई को रोकना '

1
वास्तव में साफ! तो क्या हो रहा है की लंबी व्याख्या: awk के साथ, अंतिम फ़ील्ड को पहले प्रिंट करें फिर पूरे रिकॉर्ड को, संख्यात्मक रूप से क्रमबद्ध करें, फिर कट का उपयोग करके पहले कॉलम को ट्रिम करें।
15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.