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

کمک و پشتیبانی => انجمن عمومی => نویسنده: zahra.shl در 19 شهریور 1399، 11:55 ق‌ظ

عنوان: count in linux
ارسال شده توسط: zahra.shl در 19 شهریور 1399، 11:55 ق‌ظ
سلام دوستان
دوستان من یک فایل دارم میخام در این فایل سطرهای یک ستون با هم مقایسه شوند و در صورت برابری سطرهای یک ستون دیگه با هم جمع شوند. امکانش هست کمک کنید؟ متشکرم
عنوان: پاسخ : count in linux
ارسال شده توسط: M!lad در 19 شهریور 1399، 12:39 ب‌ظ
نمونه ورودی و خروجی مورد نظر رو قرار بدید.
عنوان: پاسخ : count in linux
ارسال شده توسط: zahra.shl در 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
ممنون
عنوان: پاسخ : count in linux
ارسال شده توسط: M!lad در 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
عنوان: پاسخ : count in linux
ارسال شده توسط: zahra.shl در 19 شهریور 1399، 02:43 ب‌ظ
یک دنیا ممنونم