আমি চাই শেষ দুটি কলাম মুদ্রিত।
আমি চাই শেষ দুটি কলাম মুদ্রিত।
উত্তর:
আপনি ভেরিয়েবলটি ব্যবহার করতে পারেন NF
যা ইনপুট রেকর্ডের মোট ক্ষেত্রের সংখ্যায় সেট করা আছে:
awk '{print $(NF-1),"\t",$NF}' file
এটি ধরে নিয়েছে যে আপনার কমপক্ষে 2 টি ক্ষেত্র রয়েছে।
awk '{print $(NF-1) "\t" $NF}' file
বা awk '{print $(NF-1), $NF}' file
বা awk 'BEGIN{OFS="\t"} {print $(NF-1), $NF}' file
।
'{print $x,"\t",$y}'
ক্ষেত্রে সমস্যাটি হ'ল এটি যে প্রতিটি কমা বিচ্ছিন্ন ভেরিয়েবলকে তার নিজস্ব ক্ষেত্র হিসাবে ব্যাখ্যা করে, তাই ফলাফলটি আসলে আসবে field1<space><tab><space>field2
(কারণ এটি ডিফল্টরূপে সাদা স্থান ডিলিমিটার ব্যবহার করবে) field1<tab>field2
যার বিপরীতে সম্ভবত আপনি আশা করছেন আউটপুট ফিল্ড বিভাজক (ওএফএস) ব্যবহার করা আপনি যা চান তা প্রায় সর্বদা।
awk '{print $NF-1, $NF}' inputfile
দ্রষ্টব্য: কমপক্ষে দুটি কলাম বিদ্যমান থাকলে এটি কেবল কাজ করে। একটি কলাম সহ রেকর্ডে আপনি একটি উত্সাহী পাবেন"-1 column1"
echo 1 2 3 | awk ...
। $NF-1
হয় ($NF) - 1
যে মধ্যে awk
বাস্তবায়ন।
yacc
ব্যাকরণে ৪০ টিরও বেশি সংঘাত রয়েছে যা এ এডকে সত্যিকার অর্থে ডাকে বিদ্রূপাত্মক। অজানা বিষয়গুলির বিভিন্ন সংস্করণ আলাদাভাবে পার্সিং করছে? বড় অবাক!
echo '5 4 3 2 1' | awk '{print $NF-1,$NF; print $(NF-1), $NF}'
- বা অন্য কোনও ইনপুট যেখানে ২ য় শেষ ক্ষেত্রটি শেষ ক্ষেত্রের চেয়ে কম নয় one
@jim McNamara: প্রায় জন্য প্রথম বন্ধনী ব্যবহার করার চেষ্টা করুন NF
, অর্থাত্ $(NF-1)
এবং $(NF)
পরিবর্তে $NF-1
এবং $NF
(FreeBSD 'র জন্য Mac OS X এর 10.6.8 কাজ awk
এবং gawk
)।
echo '
1 2
2 3
one
one two three
' | gawk '{if (NF >= 2) print $(NF-1), $(NF);}'
# output:
# 1 2
# 2 3
# two three
$(NF-1)
- যা খুব কমপক্ষে আরও বেশি বহনযোগ্য $NF-1
; এটি স্পষ্টতই কম অস্পষ্ট। $(NF)
ওভারকিল হয়, যদিও - ঠিক $NF
করবে। 2 টিরও কম কলামের সাথে রেখাগুলি রক্ষণাবেক্ষণ করা সার্থক, যেমন এক-কলামের লাইনের সাহায্যে আপনি প্রথম কলামটির মান দু'বার পেয়েছেন এবং শূন্য-কলামের সাথে - খালি - লাইনগুলি awk কমান্ড পুরোপুরি ব্যর্থ হবে, একটি চেষ্টার কারণে সূচী -1 সহ একটি ক্ষেত্র অ্যাক্সেস করতে।
গাওক ব্যবহার করা সমস্যাটি দেখায়:
gawk '{ print $NF-1, $NF}' filename
1 2
2 3
-1 one
-1 three
# cat filename
1 2
2 3
one
one two three
আমি সোলারিস 10 এম 4000-তে কেবল গাওয়াক লাগিয়েছি: সুতরাং, গাক এনএফ -1 বনাম $ (এনএফ -1) ইস্যুতে কাপল্রিট। পরবর্তী প্রশ্নে পসিক্স কী বলে? প্রতি:
http://www.opengroup.org/onlinepubs/009695399/utilities/awk.html
এক দিক বা অন্য কোনও দিক নেই। ভাল না. গাওক বিয়োগফলকে বোঝায়, অন্যান্য জঞ্জাল ক্ষেত্রের নম্বর বা বিয়োগফলকে বোঝায়। হুম।
$(NF-1)
হ'ল স্পেকের ক্ষেত্রের সূচীটি গণনা করার দুটি উদাহরণই সেই ফর্মটি ব্যবহার করে: $(NF-1)
এবং $(NF+2)
। তারপরে "এক্সক্লুয়েন্স ইন অ্যাডাব্লিক" বিভাগ রয়েছে, যা $expr
[এর চেয়ে অনেক বেশি অগ্রাধিকার " হিসাবে তালিকাভুক্ত রয়েছে expr - expr
। যেহেতু NF
নিজেই একটি প্রকাশ, তাই $NF-1
মূল্যায়ন করা উচিত ($NF)-1
। এমনকি যদি, সর্বোপরি, সত্যিকার অর্থেই সেখানে বিশ্রী বাস্তবায়ন রয়েছে যা মূল্যায়ন $NF-1
করে $(NF-1)
, এখানে শেখা পাঠটি $(NF-1)
হ'ল নিরাপদ এবং বহনযোগ্য পছন্দ।
এটি দিয়ে চেষ্টা করুন
$ cat /tmp/topfs.txt
/dev/sda2 xfs 32G 10G 22G 32% /
awk print last column
$ cat /tmp/topfs.txt | awk '{print $NF}'
awk print before last column
$ cat /tmp/topfs.txt | awk '{print $(NF-1)}'
32%
awk - print last two columns
$ cat /tmp/topfs.txt | awk '{print $(NF-1), $NF}'
32% /
সমস্ত সম্ভাব্য পরিস্থিতি বিবেচনার জন্য দয়া করে এটি ব্যবহার করে দেখুন:
awk '{print $(NF-1)"\t"$NF}' file
অথবা
awk 'BEGIN{OFS="\t"}' file
অথবা
awk '{print $(NF-1), $NF} {print $(NF-1), $NF}' file