ক্ষেত্রগুলিকে ইনলাইন অনুসারে বাছাই করুন


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

জিএনইউ অ্যাডকে ব্যবহার করার এক উপায়:

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

(এটি অত্যধিক কাঁটাচামচ, পারল বা গনু অ্যাজক সমাধানটি পছন্দ করুন)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.