برنامج نصي awk عام لحساب المتوسط ​​في أي حقل من خلال وسيطة سطر الأوامر

StackOverflow https://stackoverflow.com/questions/1434016

سؤال

أريد أن أكتب نصًا عامًا awk يمكن أن يأخذ كمدخل ملف ورقم حقل (في هذا الملف) ويعطيني متوسط ​​قيمة هذا الحقل في هذا الملف.سأستخدمه شيئًا مثل هذا:

bash$ avg.awk 3 input.file
22
bash$ avg.awk 4 input.file
2001

بالطبع، يمكنني كتابة السيناريو إذا كنت أعرف الحقل (على سبيل المثال، 3 دولارات) الذي سأقوم بحساب متوسطه مسبقًا.سيكون ذلك شيئًا مثل هذا:

//{tot+=$3; count++}
END{
    print tot/count;
}

لكنني أريد أن أكون قادرًا على تغيير الحقل الذي أريد حساب متوسطه من خلال خيار سطر الأوامر.هل هذا ممكن؟شكرًا!

هل كانت مفيدة؟

المحلول

هذا واحد سوف يفعل ما تريد:

$ cat avg.awk
#!/usr/bin/env awk -f
# Calculate average, syntax: avg.awk field-number file
BEGIN { field = ARGV[1]; ARGV[1] = "" }
{ sum += $field }
END { print sum / NR }

$ cat data
1 5 7
3 6 5
8 4 6

$ avg.awk 1 data
4

$ avg.awk 2 data
5

$ avg.awk 3 data
6

نصائح أخرى

{ tot += $field; count++ }
END { print tot/count }

اتصل مثلawk -v field=3 -f avg.awk input.file

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top