फ़ील्ड इनलाइन को सॉर्ट करें


10

मैं अज्ञात क्षेत्रों में इनपुट की एक पंक्ति के भीतर क्रमबद्ध करने की कोशिश कर रहा हूं:

इनपुट:

ab bc
bc ab
cd ef bc 
bc cd ef
cd bc ab
ef ab bc cd gh

आउटपुट:

ab bc
ab bc
bc cd ef
bc cd ef
ab cb cd
ab bc cd ef gh

मैं कुछ का उपयोग कर रहा हूँ, awk '{if($2 < $1) print $2,$1;else print}'लेकिन ऐसा लगता है जैसे यह दो से अधिक क्षेत्रों में गड़बड़ हो जाएगा। कोई मदद?

जवाबों:


8

उपयोग करने का एक तरीका perl:

perl -lane 'printf qq[%s\n], join q[ ], sort @F' infile

आउटपुट:

ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh

2
चूँकि आप उपयोग कर रहे हैं -l, आपको एक नई प्रिंट करने की आवश्यकता नहीं है। print join " ", sort @Fपर्याप्त होगा।
ग्लेन जैकमैन

6

GNU awk का उपयोग करने का एक तरीका:

awk '{ 
    split($0, arr); 
    asort(arr); 
    for (i=1; i<=length(arr); i++) { 
        printf "%s ", arr[i] }; 
        printf RS 
    }
' infile

आउटपुट:

ab bc 
ab bc 
bc cd ef 
bc cd ef 
ab bc cd 
ab bc cd ef gh

2

यहाँ एक और perlसमाधान है, @ बीरी के उत्तर के समान लेकिन अधिक संक्षिप्त:

$ perl -anle 'print "@{[sort @F]}"' file
ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh

1

शेल स्क्रिप्ट में:

while read n    
do
   echo $(echo $n | tr " " "\n" | sort )
done < infile

(वह कांटा बहुत ज्यादा है, पर्ल या गन्नू अवेक समाधान से पहले)

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