انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: wc و cut برای جمع خروجی ها  (دفعات بازدید: 987 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین triumph

  • Jr. Member
  • *
  • ارسال: 78
  • جنسیت : پسر
wc و cut برای جمع خروجی ها
« : 25 دی 1392، 08:57 ق‌ظ »
سلام...اگر بخوایم خروجی wc رو با هم جمع کنیم چه طور ممکنه؟
wc -l 100/result_range 104/result_range

خروجی فرمان هست:
42 100/result_range
  8 104/result_range
 50 total
میدونم ادامه اون باید از پایپ و دستور cut -f -d استفاده بشه..ولی هر چی سعی میکنم خروجی من رو نمیده...ممکنه خط ها بین ۱ تا ۱۰۰۰ باشن..برایهمین من میخوام جمع همه خطها در نهایت حساب بشه
به طور واضح اگر بخوام بگم خروجی اسکریپت من چیزی شبیه به این هست و من میخوام این اعداد باهم جمع بشن:
3387 /test/file
23619 /test/file
5813 /test/file
10190 /test/file
1282 /test/file
42 /test/file
8 /test/file
138 /test/file
« آخرین ویرایش: 25 دی 1392، 09:03 ق‌ظ توسط triumph »

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
پاسخ : wc و cut برای جمع خروجی ها
« پاسخ #1 : 25 دی 1392، 10:54 ق‌ظ »
گیریم برآیند ( خروجی ) را در پرونده ای به نام temp.txt ریخته ایم :
cat temp.txt | cut -d' ' -f1 | sed ':a;N;$!ba;s/\n/+/g' | bc

آفلاین mahrooz

  • Newbie
  • *
  • ارسال: 14
پاسخ : wc و cut برای جمع خروجی ها
« پاسخ #2 : 30 دی 1392، 12:00 ق‌ظ »
پرسش شما مشمول این مطلب ‎ http://bashguide.blogsky.com/pages/XyProblem‎می شود. اگر شما حاصل جمع خروجی فرمان wc را می‌خواهید همانطور که در کد خروجی فرمان درج شده شما نیز دیده می‌شود wc خودش آن را با عنوان total به شما می‌دهد و نیازی به کار اضافه ندارد. به هر حال اگر خروجی نمونه خود را به یک فایل مثلا az هدایت کنید آنوقت
var1=($(cat az |cut -d' ' -f1))اعداد مورد نظر را در یک آرایه به نام var1 قرار می‌دهد. که‌حتماً می‌توانید عناصر آرایه را با تشکیل یک حلقه با یکدیگر جمع کرده در متغیر مورد نظر قرار بدهید. مانند:
sum=$((${var1[0]}+${var1[1]})) برای عضو اول و دوم.
توضیح برای کسانی که شاید ندانند: در سطر اول پرانتزهای بیرونی برای تعیین var1 به عنوان آرایه است.  cat از طرق لوله خروجی‌اش را به برنامه cut می‌دهد که برای این برنامه دوگزینه تعیین کرده‌ایم، اولی یعنی از محل فاصله و دومی یعنی فیلد اول را برش بدهد. و نتیجه به خاطر استفاده از ترکیب ‎$()‎ بعد از علامت مساوی یعنی به جای عناصر آرایه جایگزین می‌شوند.
« آخرین ویرایش: 30 دی 1392، 12:22 ق‌ظ توسط mahrooz »

آفلاین محسن صفری

  • Jr. Member
  • *
  • ارسال: 47
  • جنسیت : پسر
    • صفری آنلاین
پاسخ : wc و cut برای جمع خروجی ها
« پاسخ #3 : 11 بهمن 1392، 10:40 ب‌ظ »
این جور مساله ها رو بیشتر با awk حل می کنن .

awk '{s+=$1;print}END{print s " = total"}' filename
یا اگه بخوایم با یک shell script حل کنیم :
s=0
for i in `sed 's/ .*//' filename`
do
s=`expr $s + $i`
done
echo $s

واضحه که با awk خیلی راحتتره.
« آخرین ویرایش: 11 بهمن 1392، 10:49 ب‌ظ توسط محسن صفری »