اطبع العمود/الحقل الأخير في awk
gawk (6)
أريد طباعة العمود أو الحقل الأخير الثاني في awk. عدد الحقول متغير. أعلم أنه يجب أن أتمكن من استخدام $NF
ولكن غير متأكد من كيفية استخدامه.
وهذا لا يبدو ناجحا:
awk ' { print ( $NF-- ) } '
أول يخفض القيمة ثم يطبعها -
awk ' { print $(--NF)}' file
أو
rev file|cut -d ' ' -f2|rev
إذا كان لديك العديد من الأعمدة وترغب في طباعة كل المجموعات الثلاثة وليس الأخيرة ، فقد يساعد ذلك
awk '{ $NF="";$(NF-1)="";$(NF-2)="" ; print $0 }'
إنها أبسط:
awk '{print $--NF}'
السبب الذي لم يعمل به $NF--
الأصلي هو أن التعبير تم تقييمه قبل الانخفاض ، بينما يتم تنفيذ $NF--
prefix قبل التقييم.
حل بيرل شبيه بمحلول كريس كانون الفضي:
perl -lane 'print $F[$#F-1]' file
يتم استخدام خيارات سطر الأوامر التالية:
n
حلقة حول كل سطر من ملف الإدخال ، لا تطبع تلقائيا كل سطرl
يزيل الخطوط الجديدة قبل المعالجة ، ويضيف لهم مرة أخرى بعد ذلكوضع autosplit - خطوط الإدخال المقسمة إلى مجموعة
@F
افتراضيات لتقسيم على مسافة بيضاءe
تنفيذ رمز بيرل
يبدأ صفيفة autosplitF في الفهرس [0] بينما تبدأ حقول awk بـ $ 1.
$#F
هو عدد العناصر في @F
هل حاولت أن تبدأ من اليمين إلى اليسار باستخدام الأمر rev؟ في هذه الحالة ، تحتاج فقط إلى طباعة العمود الثاني:
seq 12 | xargs -n5 | rev | awk '{ print $2}' | rev
4
9
11
awk ' { print ( $(NF-1) ) }' file