Usando o awk para filtragem e o GNU Datamash para o pivoting que você pode fazer:
$ awk -F, '$3=="MP" && $10=="S" && $5!="MP"' FILE.TXT \
| datamash --sort -t, --group 5 sum 12 sum 15
AI,1,0.2
AIR,5,1
BIR,10,2
Estou tentando dinamizar um arquivo usando o awk. Este é um exemplo do meu arquivo de entrada:
P2P,P2P,MP,DL,AIR,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
P2P,P2P,MP,DL,AI,UP,HR,UPE,GSM,F,PP,4,NA,0.2,0.8
P2P,P2P,MP,DL,AIR,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
P2P,P2P,MP,DL,AI,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
P2P,P2P,MP,DL,AIR,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
P2P,P2P,MP,DL,AIR,UP,HR,UPE,GSM,F,PP,1,NA,0.2,0.2
P2P,P2P,MP,DL,BIR,UP,HR,UPE,GSM,S,PP,10,NA,0.2,2
P2P,P2P,MP,KT,AIR,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
P2P,P2P,MP,MM,AIR,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
A saída desejada deve estar seguindo.
AIR,5,1
AI,1,0.2
BIR,10,2
$5 . $12 (total de $12 ). $15 (total de $15 ). A condição deve seguir em awk :
$3=="MP" && $10=="S" && $5!="MP"
Usando o awk para filtragem e o GNU Datamash para o pivoting que você pode fazer:
$ awk -F, '$3=="MP" && $10=="S" && $5!="MP"' FILE.TXT \
| datamash --sort -t, --group 5 sum 12 sum 15
AI,1,0.2
AIR,5,1
BIR,10,2
com awk :
awk -F, '$3=="MP"&&$10=="S"&&$5!="MP"{a[$5]+=$12;b[$5]+=$15}
END{for(i in a){print i","a[i]","b[i]}}' file
-F, define o delimitador como , . $3=="MP"&&$10=="S"&&$5!="MP"{...} esta é a condição da questão
a[$5]+=$12;b[$5]+=$15 preenche uma matriz a com o valor total de $12 e uma matriz b com o valor total de $15 . END{...} este bloco é executado quando awk terminou o processamento de todas as linhas.
for(i in a) faz um loop no array a print i","a[i]","b[i]} imprime os valores nas duas matrizes e seu índice. A saída:
AI,1,0.2
AIR,5,1
BIR,10,2
Tags text-processing awk