Não é a solução mais bonita, mas funciona. Este script foi testado no Linux Ubuntu. Pode não funcionar em um Mac porque eu uso gawk
.
Você precisa salvar o seguinte código em um arquivo, por exemplo, parsetext.sh
Execute este comando para ativar a execução:
chmod +x parsetext.sh
Em seguida, execute-o com o seu inputfile.txt:
./parsetext.sh inputfile.txt
A seguir, o script que faz o trabalho:
#!/bin/bash
sed -e 's/|[^ ]\+//g; s/://' "$1"|\
gawk '{
for ( i = 2; i <= NF; i++) {
rows[$1][$i]++
keys[$i]++
}
}
END {
n = asorti(keys, tmp)
printf("\t")
for ( i=1; i<= n; i++) { printf("%s\t", tmp[i]) }
printf("\n")
for ( r in rows ) {
printf("%s\t", r)
for (i=1; i<= n; i++) {
value = 0
k = tmp[i]
if (rows[r][k] > 0) value = rows[r][k]
printf("%s\t", value)
}
printf("\n")
}
}'
Exemplo de saída:
CMIN GCLA GCUC
Fam1000 2 1 1
Fam1001 0 2 0
Fam1002 0 2 2
Fam1003 2 0 0