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
$.
هو رقم السطر