উত্তর
cat testfile | awk '{ print length, $0 }' | sort -n -s | cut -d" " -f2-
অথবা, কোনও সম-দৈর্ঘ্যের লাইনের আপনার মূল (সম্ভবত অনিচ্ছাকৃত) সাব-বাছাই করতে:
cat testfile | awk '{ print length, $0 }' | sort -n | cut -d" " -f2-
উভয় ক্ষেত্রেই, আমরা আপনার চূড়ান্ত কাটার জন্য ওড়না থেকে দূরে সরিয়ে আপনার বিবৃত সমস্যাটি সমাধান করেছি।
মিলের দৈর্ঘ্যের লাইন - টাইয়ের ক্ষেত্রে কী করতে হবে:
মিলের দৈর্ঘ্যের লাইনের জন্য আরও বাছাইয়ের প্রয়োজন ছিল কিনা তা প্রশ্নটি নির্দিষ্ট করে নি। আমি ধরে নিয়েছি যে এটি অনাকাঙ্ক্ষিত এবং একে অপরের বিরুদ্ধে এই ধরণের লাইনগুলি বাছাই করা রোধ করতে -s
( --stable
) ব্যবহারের পরামর্শ দিয়েছিল এবং সেগুলি ইনপুটতে যেভাবে প্রাসঙ্গিক হয় তা সেগুলি রেখে দেয়।
(যারা এই সম্পর্কগুলিকে বাছাই করতে আরও নিয়ন্ত্রণ চান তারা হয়ত বাছাইয়ের --key
বিকল্পটি দেখতে পারেন ))
কেন প্রশ্নটির চেষ্টা করা সমাধান ব্যর্থ হয় (অ্যাঙ্ক লাইন-পুনর্নির্মাণ):
এর মধ্যে পার্থক্যটি লক্ষ করা আকর্ষণীয়:
echo "hello awk world" | awk '{print}'
echo "hello awk world" | awk '{$1="hello"; print}'
তারা যথাক্রমে ফলন
hello awk world
hello awk world
প্রাসঙ্গিক ধারা (হাবা এর) ম্যানুয়াল শুধুমাত্র একটি সরাইয়া হিসাবে উল্লেখ করেছেন যে awk যখন আপনি একটি ক্ষেত্র পরিবর্তন (বিভাজক উপর ভিত্তি করে, ইত্যাদি) $ 0 পুরো পুনর্নির্মাণের যাচ্ছে। আমার ধারণা এটি পাগল আচরণ নয়। এটিতে এটি রয়েছে:
"অবশেষে, এমন সময়গুলি আসে যখন ক্ষেত্রগুলির বর্তমান মান এবং অফস ব্যবহার করে পুরো রেকর্ডটি পুনর্নির্মাণের জন্য জোর করে জোর করা সুবিধাজনক this
$1 = $1 # force record to be reconstituted
print $0 # or whatever else with $0
"এটি রেকর্ডটি পুনর্নির্মাণে বিশ্রী জোর করে" "
সমান দৈর্ঘ্যের কিছু লাইন সহ পরীক্ষার ইনপুট:
aa A line with MORE spaces
bb The very longest line in the file
ccb
9 dd equal len. Orig pos = 1
500 dd equal len. Orig pos = 2
ccz
cca
ee A line with some spaces
1 dd equal len. Orig pos = 3
ff
5 dd equal len. Orig pos = 4
g