বিকল্প 1 থেকে 3 বিকল্পে একাধিক শ্বেতস্পেসে সমস্যা রয়েছে (তবে সহজ)। 4 এবং 5 বিকল্পগুলি বিকাশের কারণ এটি, যা কোনও সমস্যা ছাড়াই একাধিক সাদা স্পেস প্রক্রিয়া করে। অবশ্যই, 4 বা 5 বিকল্পগুলি n=0
উভয়ের সাথে ব্যবহার করা হলে যে কোনও শীর্ষস্থানীয় হোয়াইটস্পেস সংরক্ষণ করা হবে কারণ n=0
কোনও বিভাজন নেই।
বিকল্প 1
একটি সাধারণ কাটা সমাধান (একক বিস্ময়করদের সাথে কাজ করে):
$ echo '1 2 3 4 5 6 7 8' | cut -d' ' -f4-
4 5 6 7 8
বিকল্প 2
কোনও অ্যাজক পুনঃ-ক্যালক জোর করে মাঝে মাঝে যোগ করা নেতৃস্থানীয় স্পেসগুলির সমস্যা (অ্যাডকের কয়েকটি সংস্করণের সাথে কাজ করে) সমাধান করে:
$ echo '1 2 3 4 5 6 7 8' | awk '{ $1=$2=$3="";$0=$0;} NF=NF'
4 5 6 7 8
বিকল্প 3
প্রতিটি ক্ষেত্রটি তৈরি করে মুদ্রণ করা printf
আরও নিয়ন্ত্রণ দেয়:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=3 '{ for (i=n+1; i<=NF; i++){printf("%s%s",$i,i==NF?RS:OFS);} }'
4 5 6 7 8
যাইহোক, পূর্ববর্তী সমস্ত উত্তরগুলি ক্ষেত্রের মধ্যে সমস্ত এফএসকে ওএফএসে পরিবর্তন করে। আসুন এটির কয়েকটি সমাধান তৈরি করুন।
বিকল্প 4
ক্ষেত্র এবং ডিলিমিটারগুলি অপসারণের জন্য সাব সহ একটি লুপটি আরও বহনযোগ্য, এবং এফএস থেকে ওএফএসে পরিবর্তনটি ট্রিগার করে না:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=3 '{ for(i=1;i<=n;i++) { sub("^["FS"]*[^"FS"]+["FS"]+","",$0);} } 1 '
4 5 6 7 8
দ্রষ্টব্য: "^ [" এফএস "] *" হ'ল নেতৃস্থানীয় স্পেস সহ একটি ইনপুট গ্রহণ করা।
বিকল্প 5
এমন কোনও সমাধান তৈরি করা সম্ভব যা অতিরিক্ত লিডিং বা ট্রেলিং হোয়াইটস্পেস যোগ না করে এবং gensub
জিএনইউ অ্যাডক থেকে ফাংশনটি ব্যবহার করে বিদ্যমান হোয়াইটস্পেসটি সংরক্ষণ করে :
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=3 '{ print gensub("["FS"]*([^"FS"]+["FS"]+){"n"}","",1); }'
4 5 6 7 8
এটি একটি গণনা অনুসারে ক্ষেত্রের তালিকা অদলবদল করতেও ব্যবহৃত হতে পারে n
:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=3 '{ a=gensub("["FS"]*([^"FS"]+["FS"]+){"n"}","",1);
b=gensub("^(.*)("a")","\\1",1);
print "|"a"|","!"b"!";
}'
|4 5 6 7 8 | ! 1 2 3 !
অবশ্যই, এই ক্ষেত্রে, অফসটি লাইনের উভয় অংশ পৃথক করতে ব্যবহৃত হয়, এবং ক্ষেত্রগুলির পিছনে সাদা স্থান এখনও মুদ্রিত হয়।
নোট 1: ["FS"]*
ইনপুট লাইনে নেতৃস্থানীয় স্থানগুলিতে অনুমতি দেওয়ার জন্য ব্যবহৃত হয়।
cut -f3-
?