Как суммировать и сортировать столбец файла вкладки, который содержит данные запятой с помощью Awk - PullRequest
1 голос
/ 18 июня 2019

У меня есть такой файл вкладки, final_score.csv:

fufu  -2  map1,map3,map8
fifi  6   map5,map1
fofo  0   map4
lili  -9  map8,map1

И я хочу создать другой файл вкладки, например:

map8  -11
map1  -5
map3  -2
map4  0
map5  6

Так что мне нужно перечислитьвсе мои соединения и суммы тех, кто как один, ударил и отсортировал их все больше.Пока у меня есть:

awk -F"\t" '{
  split($3,a,",");
  for(i=1; i in a; i++){
    print a[i],"\t",$2;
  }
}' final_score.csv > bla.csv

awk -F"\t" '$1 {sum+=$2} END {print $1,"\t",sum}' bla.csv

Но это дало мне просто:

map1  -11

У меня есть только последняя "карта" в файле и сумма столбца числа,как я могу решить это?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

awk + sort решение:

awk '{ len=split($3, a, ","); for(i=1;i<=len;i++) b[a[i]] += $2; delete a }
      END{ for(i in b) print i, b[i] }' yourfile | sort -k2

Выход:

map8 -11
map3 -2
map1 -5
map4 0
map5 6
0 голосов
/ 18 июня 2019

GNU awk версия, которая выполняет сортировку выходных данных напрямую:

$ gawk '{ split($3, a, ","); for (i in a) b[a[i]] += $2 }
        END { PROCINFO["sorted_in"] = "@val_num_asc"; OFS="\t";
              for (i in b) print i, b[i] }' final_score.tsv
map8    -11
map1    -5
map3    -2
map4    0
map5    6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...