من مسئله رو تو دو مرحله حل میکنم. ابتدا دادهای که نیاز نیست پردازش بشه رو کنار میزارم و با 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