انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: zahra.shl در 19 شهریور 1399، 11:55 قظ
-
سلام دوستان
دوستان من یک فایل دارم میخام در این فایل سطرهای یک ستون با هم مقایسه شوند و در صورت برابری سطرهای یک ستون دیگه با هم جمع شوند. امکانش هست کمک کنید؟ متشکرم
-
نمونه ورودی و خروجی مورد نظر رو قرار بدید.
-
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
ممنون
-
من مسئله رو تو دو مرحله حل میکنم. ابتدا دادهای که نیاز نیست پردازش بشه رو کنار میزارم و با 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
-
یک دنیا ممنونم