বিকল্প 1
এমন একটি সমাধান রয়েছে যা কয়েকটি সংস্করণের সাথে কাজ করে:
awk '{ $(NF+1)=$1;$1="";$0=$0;} NF=NF ' infile.txt
ব্যাখ্যা:
$(NF+1)=$1 # add a new field equal to field 1.
$1="" # erase the contents of field 1.
$0=$0;} NF=NF # force a re-calc of fields.
# and use NF to promote a print.
ফলাফল:
United Arab Emirates AE
Antigua & Barbuda AG
Netherlands Antilles AN
American Samoa AS
Bosnia and Herzegovina BA
Burkina Faso BF
Brunei Darussalam BN
তবে এটি awk এর পুরানো সংস্করণগুলির সাথে ব্যর্থ হতে পারে।
বিকল্প 2
awk '{ $(NF+1)=$1;$1="";sub(OFS,"");}1' infile.txt
এটাই:
awk '{ # call awk.
$(NF+1)=$1; # Add one trailing field.
$1=""; # Erase first field.
sub(OFS,""); # remove leading OFS.
}1' # print the line.
নোট করুন যে যা মুছতে হবে তা হ'ল অফস, এফএস নয়। ক্ষেত্র $ 1 স্বাক্ষরিত হলে রেখাটি পুনরায় গণনা করে। এটি এফএসের সমস্ত রানকে একটি ওএফএসে পরিবর্তন করে।
তবে এমনকি সেই বিকল্পটি এখনও বেশ কয়েকটি ডিলিমিটারের সাথে ব্যর্থ হয়, যেমন স্পষ্টভাবে অফসটি পরিবর্তন করে দেখানো হয়েছে:
awk -v OFS=';' '{ $(NF+1)=$1;$1="";sub(OFS,"");}1' infile.txt
এই লাইন আউটপুট হবে:
United;Arab;Emirates;AE
Antigua;&;Barbuda;AG
Netherlands;Antilles;AN
American;Samoa;AS
Bosnia;and;Herzegovina;BA
Burkina;Faso;BF
Brunei;Darussalam;BN
এটি প্রকাশ করে যে এফএসের রানগুলি একটি ওএফএসে পরিবর্তন করা হচ্ছে।
এড়াতে একমাত্র উপায় হ'ল ক্ষেত্রটির পুনরায় গণনা এড়ানো।
একটি ফাংশন যা পুনরায় গণনা এড়াতে পারে তা হ'ল সাব।
প্রথম ক্ষেত্রটি ক্যাপচার করা যায়, তারপরে সাব দিয়ে with 0 থেকে সরানো যায় এবং তারপরে উভয়ই আবার মুদ্রিত হয়।
বিকল্প 3
awk '{ a=$1;sub("[^"FS"]+["FS"]+",""); print $0, a;}' infile.txt
a=$1 # capture first field.
sub( " # replace:
[^"FS"]+ # A run of non-FS
["FS"]+ # followed by a run of FS.
" , "" # for nothing.
) # Default to $0 (the whole line.
print $0, a # Print in reverse order, with OFS.
United Arab Emirates AE
Antigua & Barbuda AG
Netherlands Antilles AN
American Samoa AS
Bosnia and Herzegovina BA
Burkina Faso BF
Brunei Darussalam BN
এমনকি যদি আমরা এফএস, ওএফএস এবং / বা আরও সীমানা যুক্ত করি তবে এটি কার্যকর হয়।
যদি ইনপুট ফাইলটি এতে পরিবর্তন করা হয়:
AE..United....Arab....Emirates
AG..Antigua....&...Barbuda
AN..Netherlands...Antilles
AS..American...Samoa
BA..Bosnia...and...Herzegovina
BF..Burkina...Faso
BN..Brunei...Darussalam
কমান্ডটি এতে পরিবর্তন হয়:
awk -vFS='.' -vOFS=';' '{a=$1;sub("[^"FS"]+["FS"]+",""); print $0,a;}' infile.txt
আউটপুটটি হবে (এখনও সীমান্ত সংরক্ষণকারী):
United....Arab....Emirates;AE
Antigua....&...Barbuda;AG
Netherlands...Antilles;AN
American...Samoa;AS
Bosnia...and...Herzegovina;BA
Burkina...Faso;BF
Brunei...Darussalam;BN
কমান্ডটি বেশ কয়েকটি ক্ষেত্রে প্রসারিত হতে পারে তবে কেবল আধুনিক জাদাগুলির সাথে এবং --re-interval বিকল্প সক্রিয় রয়েছে। মূল ফাইলটিতে এই আদেশ:
awk -vn=2 '{a=$1;b=$2;sub("([^"FS"]+["FS"]+){"n"}","");print $0,a,b;}' infile.txt
এটি আউটপুট দেবে:
Arab Emirates AE United
& Barbuda AG Antigua
Antilles AN Netherlands
Samoa AS American
and Herzegovina BA Bosnia
Faso BF Burkina
Darussalam BN Brunei