awk - separador - necesita reorganizar y sumar la columna en el comando solaris
extraer una linea de un archivo en linux (3)
Tengo datos a continuación llamados archivo atp.csv
Date_Time,M_ID,N_ID,Status,Desc,AMount,Type
2015-01-05 00:00:00 076,1941321748,BD9010423590206,200,Transaction Successful,2000,PRETOP
2015-01-05 00:00:00 077,1941323504,BD9010423590207,351,Transaction Successful,5000,PRETOP
2015-01-05 00:00:00 078,1941321743,BD9010423590205,200,Transaction Successful,1500,PRETOP
2015-01-05 00:00:00 391,1941323498,BD9010500000003,200,Transaction Successful,1000,PRETOP
Quiero contar el estado sabio usando el comando debajo.
cat atp.csv|awk -F'','' ''{print $4}''|sort|uniq -c
El resultado es como a continuación:
3 200
1 351
Pero quiero dar me gusta debajo de la salida y también quiero sumar la columna de cantidad en cuanto al estado.
200,3,4500
351,1,5000
Ese es el estado primero y luego el valor de conteo. Por favor ayuda ...
Puedes probar esta versión awk
también
awk -F'','' ''{print $4,",", a[$4]+=$6}'' FileName | sort -r | uniq -cw 6 | sort -r
Salida:
3 200 , 4500
1 351 , 5000
De otra manera:
awk -F'','' ''{print $4,",", a[$4]+=$6}'' FileName | sort -r | uniq -cw 6 |sort -r | sed ''s//([^ ]/+/)./([^ ]/+/)...//2,/1,/''
Todo en (g) awk
awk -F, ''NR>1{a[$4]++;b[$4]+=$6}
END{n=asorti(a,c);for(i=1;i<=n;i++)print c[i]","a[c[i]]","b[c[i]]}'' file
AWK tiene matrices asociativas.
% cat atp.csv | awk -F, ''NR>1 {n[$4]+=1;s[$4]+=$6;} END {for (k in n) { print k "," n[k] "," s[k]; }}'' | sort
200,3,4500
351,1,5000
En lo de arriba:
La primera línea (registro) se omite con
NR>1
.n[k]
es el número de ocurrencias de la clavek
(entonces agregamos 1), ys[k]
son los valores de la suma de ejecución en el campo 6 (por lo tanto, agregamos$6
).Finalmente, después de procesar todos los registros (
END
), puede iterar sobre las matrices asociadas por clave (for (k in n) { ... }
) e imprimir las claves y valores en las matricesn
ys
asociadas con la clave.