awk - معنى - سوق اوك




حدد الصف والعنصر في awk (4)

تعلمت أنه في awk ، $ 2 هو العمود الثاني. كيفية تحديد خط ith والعنصر في عمود ith و jth؟


لطباعة الأعمدة بسلسلة محددة ، يمكنك استخدام نمط البحث //. على سبيل المثال ، إذا كنت تبحث عن الأعمدة الثانية التي تحتوي على abc:

awk '$2 ~ /abc/'

... وإذا كنت تريد طباعة عمود معين فقط:

awk '$2 ~ /abc/ { print $3 }'

... ورقم خط معين:

awk '$2 ~ /abc/ && FNR == 5 { print $3 }'

لطباعة الخط الثاني:

awk 'FNR == 2 {print}'

لطباعة الحقل الثاني:

awk '{print $2}'

لطباعة الحقل الثالث من السطر الخامس:

awk 'FNR == 5 {print $3}'

تعديل : إليك مثال مع سطر العنوان و أوصاف الحقل (المكرر):

awk 'BEGIN {print "Name\t\tAge"}  FNR == 5 {print "Name: "$3"\tAge: "$2}'

هناك طرق أفضل لمحاذاة الأعمدة بدلاً من "\ t \ t" بالمناسبة.


للتوسع في إجابة دنيس ، استخدم خيار awk -v لتمرير قيم i و j :

# print the j'th field of the i'th line
awk -v i=5 -v j=3 'FNR == i {print $j}'

منذ awk و perl ترتبط ارتباطا وثيقا ...

مكافئات Perl من حلول @ Dennis's awk:

لطباعة الخط الثاني:
perl -ne 'print if $. == 2' file

لطباعة الحقل الثاني:
perl -lane 'print $F[1]' file

لطباعة الحقل الثالث من السطر الخامس:
perl -lane 'print $F[2] if $. == 5' file

Perl مكافئ لحل @ Glenn:

اطبع الحقل j'th للخط i'th

perl -lanse 'print $F[$j-1] if $. == $i' -- -i=5 -j=3 file

مكافئات Perl لحلول @ Hai:

إذا كنت تبحث عن الأعمدة الثانية التي تحتوي على abc:

perl -lane 'print if $F[1] =~ /abc/' foo

... وإذا كنت تريد طباعة عمود معين فقط:

perl -lane 'print $F[2] if $F[1] =~ /abc/' foo

... ورقم خط معين:

perl -lane 'print $F[2] if $F[1] =~ /abc/ && $. == 5' foo

-l يزيل الخطوط الجديدة ، ويضيفها مرة أخرى عند الطباعة
-a autosplits سطر الإدخال إلى صفيف @F ، باستخدام المسافات البيضاء كمحدد
-n حلقة فوق كل سطر من ملف الإدخال
-e تنفيذ التعليمات البرمجية داخل علامات اقتباس
$F[1] العنصر الثاني للمصفوفة ، حيث يبدأ Perl عند 0
$. هو رقم السطر