আমি একাধিক সাদা স্থানের দ্বারা পৃথক করতে কাটাটি কীভাবে ব্যবহার করব?


23

আমি এই নমুনার শেষ কলামটি পেতে চাই:

[  3]  1.0- 2.0 sec  1.00 MBytes  8.39 Mbits/sec
[  3]  2.0- 3.0 sec   768 KBytes  6.29 Mbits/sec
[  3]  3.0- 4.0 sec   512 KBytes  4.19 Mbits/sec
[  3]  4.0- 5.0 sec   256 KBytes  2.10 Mbits/sec
...

যদি আমি ব্যবহার করি

cut -d\  -f 13

আমি পাই

Mbits/sec
6.29
4.19
2.10

কারণ মাঝে মধ্যে মাঝে মাঝে অতিরিক্ত জায়গা থাকে।


সর্বশেষ কলামটি হল Mbits/sec, আপনি যা চান তা বা 2 টি সর্বশেষ কলামগুলি?
টেরডন

1
আমি কেবল ২ য় শেষ কলামটি পেতে চাই, কেবল সংখ্যাগুলি
rubo77

উত্তর:


17

আপনার প্রশ্নের আক্ষরিক উত্তর দিতে:

sed 's/   */:/g' | cut -d : -f 5

অথবা

awk -F '  +' '{print $5}'

তবে বন্ধনীর সংখ্যা 10, ইত্যাদি পর্যন্ত পৌঁছলে তা হবে না আপনি যদি কেবলমাত্র সংখ্যাগুলিতে আগ্রহী হন তবে আপনি সমস্ত কিছু সরিয়ে ফেলতে পারেন।

sed 's/[^.0-9][^.0-9]*/:/g' | cut -d : -f 6

হ্যাঁ, কেবলমাত্র সংখ্যাগুলি নিশ্চিত, তবে কেবলমাত্র আপনার তৃতীয় উদাহরণটি সঠিকভাবে কাজ করে
রুবু Jan77

@ রুবো me আমার জন্য কাজ করে। প্রথম দুটি উদাহরণ আপনি আপনার শিরোনামে যা চান ঠিক তেমন করে। অথবা আপনি ইউনিটটিও বন্ধ করে দিতে চান? | sed 's/ .*//'সেক্ষেত্রে প্রথম দুটি উদাহরণের শেষে যুক্ত করুন । অবশ্যই এটি করার আরও অনেক উপায় রয়েছে।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

+পরিবর্তে কিছুটা খাটো *: বিড়াল পরীক্ষা | সেডস / [0। 0-9] \ + /: / জি '| কাটা
ডি

@ রুবো 77 যদি আপনার সেড সমর্থন করে তবে তা। এটি জিএনইউ এবং ব্যাসিবক্স দ্বারা সমর্থিত তবে বিএসডি বা সোলারিস দ্বারা নয় by POSIX নির্দিষ্ট করে +এবং ?প্রাকে কিন্তু পাতা \+এবং \?BRE অপরিজ্ঞাত।
গিলস 'অশুভ হওয়া বন্ধ করুন'

22

যদি আমরা ব্যবহার trসঙ্গে বরাবর কমান্ড লুৎফর বিকল্প ( -sপতাকা) একটা একক স্থান থেকে সব একাধিক পরপর স্পেস রূপান্তর করতে এবং তারপর সঞ্চালন cutবিভেদক হিসাবে স্থান সঙ্গে অপারেশন - আমরা সংখ্যার বহন প্রয়োজনীয় কলাম অ্যাক্সেস করতে পারেন।

স্নিপড বেলো কোডটি দেখুন:

cat file | tr -s ' ' | cut -d ' ' -f 8


4
এই উত্তরটি বেশি হওয়া উচিত; এটি এখন পর্যন্ত সবচেয়ে সহজ এবং সর্বাধিক পঠনযোগ্য সমাধান।
লুক

5

এই কমান্ডগুলি সমস্ত একটি স্পেস বিচ্ছিন্ন ফাইলের শেষ কলামটি মুদ্রণ করবে:

  • awk '{print $NF}' file

    ইন awk, NFক্ষেত্রের সংখ্যা এবং $NFশেষ ক্ষেত্র।

  • perl -lane 'print $F[$#F]' file

    -aঅ্যারের মধ্যে হোয়াইটস্পেস ফাইল splits @F, $#Fঅ্যারের মধ্যে উপাদানের সংখ্যা তাই $F[$#F]গত উপাদান। -nমানে কমান্ড লাইন দেওয়া ফাইলটি পড়ার এবং স্ক্রিপ্ট পাস আবেদন -eপ্রতিটি লাইনে করতে। প্রতিটি বিবৃতিতে -lকেবল একটি নতুন লাইন অক্ষর ( \n) যুক্ত করুন print

  • sed 's/.* //g'

    একটি সাধারণ নিয়মিত অভিব্যক্তি যা শেষ স্থানের সাথে সমস্ত কিছুর সাথে মেলে এবং এটি মুছে দেয়, কেবল শেষ কলামটি রেখে leaving

  • rev file | cut -d' ' -f 1 | rev

    revএর আউটপুটটিকে বিপরীত করে তাই সর্বশেষ ক্ষেত্রটি এটি প্রথম cutমুদ্রণের জন্য ডিলিমিটার স্পেস সহ এবং revপাঠ্যটিকে স্বাভাবিক অবস্থায় ফিরিয়ে দেয়। আপনার যদি টানা সাদা অংশ থাকে তবে এটি কাজ করবে না

আপনার ইনপুট এর উপর ভিত্তি করে, আমি অনুমান করছি আপনি আসলে শেষ কলামটি চান না তবে পেনাল্টিমেট এক বা দুটি শেষের চান। সেক্ষেত্রে সর্বশেষ 2 ( 8.39 Mbits/sec) মুদ্রণ করতে এগুলি ব্যবহার করুন :

awk '{print $(NF-1),$NF}' file 
perl -lane 'print "$F[$#F-1] $F[$#F]"' file 
sed 's/.* \(.* .*\)/\1/' file 
rev file | cut -d' ' -f 1,2 | rev

এবং এগুলি উপদ্বীপে মুদ্রণ করতে ( 8.39):

awk '{print $(NF-1)}' file 
perl -lane 'print $F[$#F-1]' file 
sed 's/.* \(.*\) .*/\1/' file 
rev file | cut -d' ' -f 2 | rev

4

cutম্যানুয়াল অনুসারে আপনি সাদা স্পেসগুলির একাধিক ঘটনা পৃথক করতে পারবেন না :

আউটপুট ক্ষেত্রগুলি ক্ষেত্রের ডিলিমিটার চরিত্রের একক ঘটনা দ্বারা পৃথক করা হয়।

যদি না পাঠ্যটি একই পরিমাণে পৃথক করা হয় বা আপনি trতাদের অতিরিক্ত সরাতে ব্যবহার করেন না।

অন্যথায় বিকল্প সরঞ্জাম যেমন awk, sedবা ব্যবহার করুন ex

উদাহরণ স্বরূপ:

ex -s +'%norm $2Bd0' +%p +q! foo.txt

স্থান পরিবর্তনগুলি সংরক্ষণ করতে এর +q!সাথে প্রতিস্থাপন করুন -cwq


0

এর মতো পার্ল ওয়ান-লাইনার ব্যবহার করুন:

perl -lane 'print $F[-2]' input_file

ব্যাখ্যা:

বিকল্পের -eফলে পার্ল ইন্টারপ্রেটার কোনও ফাইলের পরিবর্তে স্ক্রিপ্ট ইনলাইন সন্ধান করতে পারে।

বিকল্পের -nফলে ইনপুট (কোনও পাইপ থেকে ফাইল বা এসটিডিআইএন) একের পর এক লাইনে পঠনযোগ্য হয়।

বিকল্পটি -lলাইনটি পড়ার পরে ইনপুট রেকর্ড বিভাজক (ওএস-নির্ভর, ডিফল্টরূপে ইউনিক্সে নতুন লাইন) স্ট্রিপস করে এবং এটিকে প্রতিটি শেষে যুক্ত করেprint

বিকল্পের -aফলে প্রতিটি ইনপুট লাইন হোয়াইটস্পেসে অ্যারেতে বিভক্ত হয়ে যায় @Fএবং $F[-2]এটি প্রান্ত থেকে দ্বিতীয় উপাদান হিসাবে গণনা করা হয় যা আপনি চান সেই ক্ষেত্র। আপনি এটিও ব্যবহার করতে পারেন $F[$#F-1], $#Fঅ্যারের শেষ সূচকটি কোথায় @F, যা কিছুটা কম পঠনযোগ্য।

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