এটি সহজ, সংক্ষিপ্ত এবং সহজেই লেখা, বুঝতে এবং পরীক্ষা করা সহজ এবং আমি ব্যক্তিগতভাবে এটি পছন্দ করি:
grep -oE '\S+$' file
grep
উবুন্টুতে , যখন শ্বেতস্পেসের অক্ষর বোঝায় -E
বা ব্যবহার করা হয় তখন শর্টহ্যান্ড-P
গ্রহণ করে ( সাধারণত বাস্তবে কোনও স্থান বা ট্যাব থাকে) এবং এমন কোনও কিছু বোঝায় যা একটি নয়। কোয়ান্টিফায়ার এবং লাইনটির শেষ প্রান্তটি ব্যবহার করে , প্যাটার্নটি একটি লাইনের শেষে এক বা একাধিক অ-ফাঁকা সাথে মেলে । আপনি এর পরিবর্তে ব্যবহার করতে পারেন ; এই ক্ষেত্রে অর্থটি একই তবে ভিন্ন নিয়মিত এক্সপ্রেশন ইঞ্জিন ব্যবহৃত হয়, তাই তাদের বিভিন্ন কার্যকারিতা বৈশিষ্ট্য থাকতে পারে । \s
\S
+
$
\S+$
-P
-E
এটি অবিনাশ রাজের মন্তব্যযুক্ত সমাধানের সমান (কেবল একটি সহজ, আরও কমপ্যাক্ট সিনট্যাক্স সহ):
grep -o '[^[:space:]]\+$' file
সংখ্যার পরে যদি পূর্ববর্তী সাদা স্থান থাকতে পারে তবে এই পদ্ধতিগুলি কাজ করবে না । তারা তাই করে তাদের পরিবর্তন করা যেতে পারে, তবে আমি এখানে intoোকানোর কোনও অর্থ দেখছি না। যদিও এটি বেশিরভাগ ক্ষেত্রে অধীনে কাজ করার সমাধানকে সাধারণীকরণ করার জন্য নির্দেশমূলক, তবুও প্রায়শই লোকেরা ধারনা করে এমনটি করা প্রায়শই বাস্তব নয়, কারণ সমস্যাটি শেষ পর্যন্ত অনেকগুলি বেমানান উপায়গুলির মধ্যে কোনটি জানার উপায় নেই যা সাধারণত শেষ পর্যন্ত প্রয়োজন might সাধারণীকরণ করা।
পারফরম্যান্স কখনও কখনও একটি গুরুত্বপূর্ণ বিবেচনা। এই প্রশ্নটি অনুমান করে না যে ইনপুটটি খুব বড়, এবং সম্ভবত এখানে পোস্ট করা প্রতিটি পদ্ধতিই যথেষ্ট দ্রুত যথেষ্ট। তবে, গতি যদি কাঙ্ক্ষিত হয় তবে এখানে দশ মিলিয়ন লাইন ইনপুট ফাইলের একটি ছোট মাপদণ্ড রয়েছে:
$ perl -e 'print((<>) x 2000000)' file > bigfile
$ du -sh bigfile
439M bigfile
$ wc -l bigfile
10000000 bigfile
$ TIMEFORMAT=%R
$ time grep -o '[^[:space:]]\+$' bigfile > bigfile.out
819.565
$ time grep -oE '\S+$' bigfile > bigfile.out
816.910
$ time grep -oP '\S+$' bigfile > bigfile.out
67.465
$ time cut -d= -f2 bigfile > bigfile.out
3.902
$ time grep -o '[^[:space:]]\+$' bigfile > bigfile.out
815.183
$ time grep -oE '\S+$' bigfile > bigfile.out
824.546
$ time grep -oP '\S+$' bigfile > bigfile.out
68.692
$ time cut -d= -f2 bigfile > bigfile.out
4.135
অর্ডার ম্যাটার হয়ে যাওয়ার ক্ষেত্রে আমি এটি দু'বার চালিয়েছি (কারণ এটি কখনও কখনও I / O- ভারী কাজের জন্য হয়) এবং কারণ আমার কাছে এমন কোনও মেশিন নেই যা ব্যাকগ্রাউন্ডে অন্য জিনিসগুলি করছিল না যা ফলাফলগুলি আঁকিয়ে ফেলতে পারে। এই ফলাফলগুলি থেকে আমি নিম্নলিখিতটি শেষ করি, কমপক্ষে সাময়িকভাবে এবং আমি ব্যবহৃত আকারের ইনপুট ফাইলগুলির জন্য:
কি দারুন! পাসিং -P
( পিসিআরই ব্যবহারের জন্য ) পরিবর্তে -G
(কোনও ডায়ালেক্ট নির্দিষ্ট না করা হলে ডিফল্ট) বা প্রস্থের অর্ডারে দ্রুত -E
তৈরি করা grep
হয়। সুতরাং বড় ফাইলগুলির জন্য, এই কমান্ডটি উপরের প্রদর্শিত আদেশের চেয়ে ব্যবহার করা ভাল:
grep -oP '\S+$' file
কি দারুন!! cut
পদ্ধতি αғsнιη এর উত্তর , , এমনকি আমার পথ থেকে দ্রুততর সংস্করণের তুলনায় দ্রুততর মাত্রার একটি আদেশ শেষ! এটি Pa4080 এর বেঞ্চমার্কেও বিজয়ী ছিল , যা এর চেয়ে আরও বেশি পদ্ধতিগুলি কভার করেছিল তবে ছোট ইনপুট সহ - এবং এই কারণেই আমি আমার পরীক্ষায় অন্তর্ভুক্ত করার জন্য অন্যান্য সমস্ত পদ্ধতির মধ্যে এটি বেছে নিয়েছিলাম। যদি পারফরম্যান্স গুরুত্বপূর্ণ হয় বা ফাইলগুলি বিশাল হয় তবে আমি মনে করি এর পদ্ধতিটি ব্যবহার করা উচিত।cut -d= -f2 file
cut
এটি একটি অনুস্মারক হিসাবেও কাজ করে যে সহজ cut
এবং paste
ইউটিলিটিগুলি ভুলে যাওয়া উচিত নয় এবং প্রযোজ্য ক্ষেত্রে সম্ভবত পছন্দ করা উচিত, যদিও এর মতো আরও পরিশীলিত সরঞ্জামগুলি grep
প্রায়শই প্রথম সারির সমাধান হিসাবে দেওয়া হয় (এবং আমি ব্যক্তিগতভাবে আরও অভ্যস্ত ব্যবহার করে)।
grep -o '[^[:space:]]\+$' file