শেলটিতে, যখন আমার কোনও নির্দিষ্ট কলামের প্রয়োজন হবে তখন আমি আঁতকে উঠি pipe
এটি কলাম 9 প্রিন্ট করে, উদাহরণস্বরূপ:
... | awk '{print $9}'
আমি কীভাবে ডাব্লাকে কলাম 9 সহ কলাম 9 সহ এবং তার পরে সমস্ত কলাম মুদ্রণ করতে বলতে পারি ?
উত্তর:
awk '{ s = ""; for (i = 9; i <= NF; i++) s = s $i " "; print s }'
awk -v N=9 '{sep=""; for (i=N; i<=NF; i++) {printf("%s%s",sep,$i); sep=OFS}; printf("\n")}'
cut
বা perl
এই জন্য। আপনি যদি সত্যিই এটিটিতে প্রবেশ করার জন্য জেদ করেন তবে এটি ব্যবহার করুন awk
।
আপনি যখন ক্ষেত্রের একটি পরিসীমা করতে চান, awk
সত্যিই এটি করার সরাসরি কোনও সরল পথ নেই। cut
পরিবর্তে আমি সুপারিশ করব :
cut -d' ' -f 9- ./infile
একটি ট্যাব হওয়ার কারণে ডিফল্টরূপে স্পেস ফিল্ড ডিলিমিটার যুক্ত হয়েছে। এটি উল্লেখ করার জন্য গ্লেনকে ধন্যবাদ
find . | xargs ls -l | cut -d' ' -f 9-
। কোনও কারণে ডাবল স্পেসগুলিও গণনা করা হয়। উদাহরণ: এর lrwxrwxrwx 1 me me 21 Dec 12 00:00 ./file_a lrwxrwxrwx 1 me me 64 Dec 6 00:06 ./file_b
ফলাফল হবে./file_a 00:06 ./file_b
awk '{print substr($0, index($0,$9))}'
সম্পাদনা : দ্রষ্টব্য, নবমীর আগে কোনও ক্ষেত্রের নবম হিসাবে একই মান থাকলে এটি কাজ করে না।
sed -re 's,\s+, ,g' | cut -d ' ' -f 9-
পরিবর্তনশীল প্রস্থের সাদা অংশের সাথে কাজ করার পরিবর্তে সমস্ত সাদা স্থানকে একক স্থান হিসাবে প্রতিস্থাপন করুন। তারপরে cut
আগ্রহের ক্ষেত্রগুলির সাথে সহজ ব্যবহার করুন ।
এটি বিশ্রী ব্যবহার করে না তাই জার্মানী হয় না তবে অন্যান্য উত্তর / মন্তব্য দেওয়া যথাযথ বলে মনে হয়।
ps faux |
ব্যবহারের জন্য আদর্শ । কখনই XYZ স্বীকৃতি পাওয়ার সরঞ্জামটি ভয় পাবেন না the
সাধারণত পার্ল অ্যাডকে / এসইডি / গ্রেপ ইত্যাদি প্রতিস্থাপন করে। আল।, এবং আরও অনেক বহনযোগ্য (পাশাপাশি কেবল আরও ভাল পেনকেনিফ হওয়া)।
perl -lane 'print "@F[8..$#F]"'
টিমটোড্ডি অবশ্যই প্রয়োগ করে।
-l
যুক্ত \n
করতে হবে বা মুদ্রণ বিবৃতিতে যুক্ত করতে হবে।
awk -v m="\x01" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
প্রদত্ত ক্ষেত্রটি এনআর।, এন এর আগে যা আছে তা এই চপগুলি এবং ক্ষেত্রের এনআরএন এবং সহ সমস্ত লাইনের মুদ্রণ করে এবং মূল ফাঁক রক্ষণাবেক্ষণ করে (এটি পুনরায় ফর্ম্যাট করে না)। যদি ক্ষেত্রের স্ট্রিংটি লাইনের অন্য কোথাও উপস্থিত হয় তবে এটি ম্যাটার করে না, যা Ascherer এর উত্তর নিয়ে সমস্যা।
একটি ফাংশন সংজ্ঞায়িত করুন:
fromField () {
awk -v m="\x01" -v N="$1" '{$N=m$N; print substr($0,index($0,m)+1)}'
}
এবং এটি এর মতো ব্যবহার করুন:
$ echo " bat bi iru lau bost " | fromField 3
iru lau bost
$ echo " bat bi iru lau bost " | fromField 2
bi iru lau bost
আউটপুট সমস্ত স্থান বজায় রাখে, ট্র্যাকিং স্পেস সহ এন = 0 এর জন্য এটি পুরো লাইনটি যেমনটি ফিরে আসে, এবং এন> এনএফের জন্য খালি স্ট্রিংটি দেয়
এখানে ls -l
আউটপুট উদাহরণ :
-rwxr-----@ 1 ricky.john 1493847943 5610048 Apr 16 14:09 00-Welcome.mp4
-rwxr-----@ 1 ricky.john 1493847943 27862521 Apr 16 14:09 01-Hello World.mp4
-rwxr-----@ 1 ricky.john 1493847943 21262056 Apr 16 14:09 02-Typical Go Directory Structure.mp4
-rwxr-----@ 1 ricky.john 1493847943 10627144 Apr 16 14:09 03-Where to Get Help.mp4
যে কোনও পোস্ট মুদ্রণের জন্য আমার সমাধান $9
isawk '{print substr($0, 61, 50)}'
প্রথম 3 টি ক্ষেত্র প্রদর্শন করতে এবং অবশিষ্ট ক্ষেত্রগুলি মুদ্রণ করতে আপনি ব্যবহার করতে পারেন:
awk '{s = ""; for (i=4; i<= NF; i++) s= s $i : "; print $1 $2 $3 s}' filename
যেখানে 3 1 $ 2 $ 3 প্রথম 3 ক্ষেত্র।
অজকের পরিবর্তে কাট ব্যবহার করা এবং -c অক্ষর কাট কমান্ডটি ব্যবহার করে কোন কলামটি শুরু করা উচিত তা নির্ধারণের সাথে সমস্যাগুলি কাটিয়ে ওঠা।
এখানে আমি বলছি, আউটপুটটির প্রথম 49 টি অক্ষর ছাড়া আমাকে সমস্ত দিন give
ls -l /some/path/*/* | cut -c 50-
/*/*/
Ls কমান্ড শেষে তা আমাকে দেখাও সাবডিরেক্টরি খুব বলছে করা হয়।
আপনি আলা (কাটা ম্যান পৃষ্ঠা থেকে) অক্ষরগুলির নির্দিষ্ট রেঞ্জগুলিও বের করতে পারেন। উদাহরণস্বরূপ, বর্তমানে লগ ইন করা ব্যবহারকারীদের নাম এবং লগইন সময়গুলি দেখান:
who | cut -c 1-16,26-38