এজেডিতে দ্বিতীয় শেষ কলাম / ক্ষেত্র মুদ্রণ করুন


164

আমি দ্বিতীয় শেষ কলাম বা ক্ষেত্রটি এজেডে মুদ্রণ করতে চাই। ক্ষেত্রের সংখ্যা পরিবর্তনশীল। আমি জানি যে আমার ব্যবহার করতে সক্ষম হওয়া উচিত $NFতবে এটি কীভাবে ব্যবহার করা যায় তা নিশ্চিত নয়।

এবং এটি কাজ করে বলে মনে হচ্ছে না:

awk ' { print ( $NF-- )  } '

10
NFসর্বশেষ ক্ষেত্রের সূচক, শেষ ক্ষেত্রের $NFমান
গ্লেন জ্যাকম্যান

এখন তা বোধগম্য হয়। মনে হয় বাহকটির বাইরে ডলার কেন কাজ করে আমি মনে করি
ব্রায়ান জি

উত্তর:


279
awk '{print $(NF-1)}'

কাজ করা উচিত


2
এটি আমার পক্ষে কাজ করে না। আমি "শিরোনাম: 5: কমান্ডটি পাওয়া যায় নি: NF-1" উবুন্টুর অধীনে 3.1.8 এ আছে।
গুরুগেহ

3
আপনি $ NF এর মান পরিবর্তন করবেন না তা নিশ্চিত করার জন্য আমি পূর্ব / পোস্টের হ্রাস এড়াতে পারি
গ্রেগরি প্যাটমোর

আপনি যদি তৃতীয় শেষ ক্ষেত্রটি পেতে চেষ্টা করেন তবে এটি ব্রেক হবেawk -F '.' '{print $(NF-2)}'
gies0r

3
@ গুরুগাহ: এটি হ'ল কারণ $(..)আপনি কোন শেল ব্যবহার করছেন তার উপর নির্ভর করে সাবসেলের একটি কমান্ড আহ্বান করা হয়েছে। $ (NF-1)পরিবর্তে ব্যবহার করে আপনি এটিকে ঘিরে কাজ করতে পারেন $(NF-1)
উইটিং

21

ক্রিস কানন'র স্বীকৃত উত্তরটিতে ছোট সংযোজন: কেবলমাত্র দ্বিতীয়টি শেষ কলামে উপস্থিত থাকলে মুদ্রণ করুন।

(
echo       | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1     | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 2   | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 2 3 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
)

15

এটি সবচেয়ে সহজ:

 awk '{print $--NF}' 

আসলটি $NF--কাজ না করার কারণটি হ'ল হ্রাসের আগে অভিব্যক্তিটি মূল্যায়ন করা হয়, যেখানে আমার উপসর্গ হ্রাস মূল্যায়নের আগে সম্পাদিত হয়।


স্তন্যপায়ী হিসাবে, এই আচরণটি সি / জাভা ইত্যাদির সমান int x = ++i int x = i++, উপসর্গটির অর্থ প্রথমে বৃদ্ধি; পোস্টফিক্সের অর্থ হ'ল পরে ইনক্রিমেন্ট assign
উইকএন্ড


4

আপনি ফলাফল থেকে খুব দূরে ছিল না! এটি এটি করে:

awk '{NF--; print $NF}' file

এটি একটিতে ক্ষেত্রের সংখ্যা হ্রাস করে, যাতে $NFএতে প্রাক্তন পেনাল্টিমেট থাকে।

পরীক্ষা

আসুন কিছু নম্বর উত্পন্ন করুন এবং তাদের 5 টি গ্রুপে মুদ্রণ করুন:

$ seq 12 | xargs -n5
1 2 3 4 5
6 7 8 9 10
11 12

প্রতিটি লাইনে পেনাল্টিমেট মুদ্রণ করা যাক:

$ seq 12 | xargs -n5 | awk '{NF--; print $NF}'
4
9
11

3

পার্ল সলিউশন ক্রিস কাননের অজানা সমাধানের অনুরূপ:

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

এই কমান্ড-লাইন বিকল্পগুলি ব্যবহার করা হয়:

  • n ইনপুট ফাইলের প্রতিটি লাইন প্রায় লুপ, প্রতিটি লাইন স্বয়ংক্রিয়ভাবে মুদ্রণ করবেন না

  • l প্রসেসিংয়ের আগে নতুন লাইনগুলি সরিয়ে দেয় এবং পরে এগুলিকে আবার যুক্ত করে

  • aঅটোস্প্লিট মোড - @Fঅ্যারেতে ইনপুট লাইনগুলি বিভক্ত করুন । সাদা স্থানটিতে বিভাজনে ডিফল্ট

  • e পার্ল কোডটি কার্যকর করুন

@FAutosplit অ্যারের সূচিতে শুরু [0] awk ক্ষেত্র $ 1 দিয়ে শুরু হয়।
$#Fউপাদানগুলির সংখ্যা@F


1
বা ইতিমধ্যে পার্ল দ্বারা সরবরাহিত নেতিবাচক সূচকটি ব্যবহার করুন ...$F[-2]
সন্দীপ

2

আপনি কি Rev কমান্ডটি ব্যবহার করে ডান থেকে বামে যাওয়ার চেষ্টা করেছিলেন? এই ক্ষেত্রে আপনাকে কেবল ২ য় কলামটি মুদ্রণ করতে হবে:

seq 12 | xargs -n5 | rev | awk '{ print $2}' | rev
4
9
11


0

আপনার যদি অনেকগুলি কলাম রয়েছে এবং শেষের তিনটি চৌম্বকগুলি নয় তবে সমস্ত মুদ্রণ করতে চান, তবে এটি সাহায্য করতে পারে

awk '{ $NF="";$(NF-1)="";$(NF-2)="" ; print $0 }'

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