آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

پرسش و پاسخ شماره ۷۶

پرسش و پاسخ شماره ۷۶

چگونه می‌توانم حاصل جمع تمام اعداد در یک ستون را به دست آورم؟

این سؤال و تمام پرسش‌های مشابه آن با یک AWK یک سطری پاسخ داده می‌شوند.

awk '{sum += $1} END {print sum}' myfile

یک تقلای کوچک می‌تواند این خط دستور را با اکثر وظایف مشابه (یافتن میانگین، پرش از سطرهایی با تعداد فیلدهای اشتباه، غیره) وفق بدهد.

برای مثالهای بیشتر کاربرد awk، دستورات یک سطری مفید برای awk را ببینید.

پیشنهادهای BASH

# برای [حالت]یک عدد در هر سطر‎
sum=0; while read -r line; do (( sum += line )); done < "myfile"; echo "$sum"

# جمع  اعداد فیلد سوم‎
sum=0; while read -r -a fields; do (( sum += ${fields[2]} )); done < "myfile"; echo "$sum"

# انجام همان کار برای فایلی که در آن سطرها یک سطر نیستند(مترجم: یعنی به یک کاراکتر سطر جدید ختم نمی‌شوند)، اما باسمی‌کالن جداشده‌اند و فیلدها با کاما جدا شده‌اند
sum=0; while IFS=, read -rd ';' -a fields; do (( sum += ${fields[2]} )); done < "myfile"; echo "$sum"

توجه نمایید که در مورد فوق لازم است فایل باسمی‌کالن تمام شود(نه با یک سطر). اگر چنین نیست، می‌توانید برای اضافه کردن یک سمی‌کالن ‎< "myfile"‎‎‎ را با ‎<<< "$(<myfile);"‎‎ تعویض کنید، طوری که read بتواند آخرین سطر را ببیند.


پرسش و پاسخ 76 (آخرین ویرایش ‎2011-06-25 15:19:06‎ توسط GreyCat)