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

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

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


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: count in linux  (دفعات بازدید: 357 بار)

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

آفلاین zahra.shl

  • Newbie
  • *
  • ارسال: 14
count in linux
« : 19 شهریور 1399، 11:55 ق‌ظ »
سلام دوستان
دوستان من یک فایل دارم میخام در این فایل سطرهای یک ستون با هم مقایسه شوند و در صورت برابری سطرهای یک ستون دیگه با هم جمع شوند. امکانش هست کمک کنید؟ متشکرم

آفلاین M!lad

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1757
پاسخ : count in linux
« پاسخ #1 : 19 شهریور 1399، 12:39 ب‌ظ »
نمونه ورودی و خروجی مورد نظر رو قرار بدید.
..I feel no fault for the fault I feel..

آفلاین zahra.shl

  • Newbie
  • *
  • ارسال: 14
پاسخ : count in linux
« پاسخ #2 : 19 شهریور 1399، 12:49 ب‌ظ »
a  b  c  d   e
1  2   3  4  5
2  6   8  9  10
1  8   9  5  4
 ستون e سطرهایش با هم مقایسه شوند و در صورت برابر بودن مقدار سطرهای متناظر ستون c شون با هم جمع بشوند
خروجی
1 12
2 8
ممنون

آفلاین M!lad

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1757
پاسخ : count in linux
« پاسخ #3 : 19 شهریور 1399، 02:37 ب‌ظ »
من مسئله رو تو دو مرحله حل می‌کنم. ابتدا داده‌ای که نیاز نیست پردازش بشه رو کنار میزارم و با awk سطرهایی که لازم هست رو داده‌هاشون رو جمع می‌کنم. در انتها داده‌هایی که یکتا بودن رو اضافه می‌کنم.

ورودی شما هم از تعداد spaceهای یکسانی برخوردار نیست. ممکنه درست پردازش نشه tr -s ' ' < filename باید در این مورد مشکل رو حل کنه.

-- مثال --

ورودی:

$ cat 1
a b c d e
1 2 3 4 5
1 3 2 1 1
2 3 9 4 5
1 1 2 5 3
1 9 3 2 7
9 9 2 1 3

اعمال یک فیلتر ابتدایی:

$ tail -n +2 1 | sort -nk5 | uniq -D -f 4
1 1 2 5 3
9 9 2 1 3
1 2 3 4 5
2 3 9 4 5

پردازش اطلاعات فیلتر شده:

$ tail -n +2 1 | sort -nk5 | uniq -D -f 4 | awk '{if(NR==1){DC=$5;S=$3}else{if(DC==$5){S+=$3}else{print S, DC; S=$3; DC=$5}}} END {print S,DC}'
4 3
12 5

اضافه کردن اطلاعات unique به داده پردازش شده:

$ tail -n +2 1 | sort -nk5 | uniq -u -f 4
1 3 2 1 1
1 9 3 2 7

کافیه دو دستور آخر رو ریداریکت کنید به یک فایل:

cmd1 > newfile
cmd2 >> newfile
..I feel no fault for the fault I feel..

آفلاین zahra.shl

  • Newbie
  • *
  • ارسال: 14
پاسخ : count in linux
« پاسخ #4 : 19 شهریور 1399، 02:43 ب‌ظ »
یک دنیا ممنونم