Não tenho certeza se você deseja imprimir o ">" Entre na saída ou se existir na entrada ... Por favor, me dê um feedback para que eu possa fazer as correções no script.
Isso deve fazer o trabalho se a entrada e a saída forem exatamente como você descreveu:
#!/usr/bin/awk
{
# Set the INDEX for each 'Initial Solution'
if ($1==">Initial"){
gsub(/\./,"",$3);
INDEX=$3;}
#Discard lines with 'Species' or 'Description'
if (($1==">Description")||($1==">Species")) next;
#Remove '>' from the first field
gsub(/>/,"",$1)
#Set the labels of the rows
PH[0]="Column"
PE[0]="Specie\ph"
H[0]="H+"
OH[0]="OH-"
AM[0]="Am+2"
#Set other values (pH, pe, etc)
if ($1=="pH") PH[INDEX]=$3
if ($1=="pe") PE[INDEX]=$3
if ($1=="H+") H[INDEX]=$2" "$3
if ($1=="OH-") OH[INDEX]=$2" "$3
if ($1=="Am+2") AM[INDEX]=$2" "$3
}
# Print each array.
END {
for (i = 0; i <= INDEX; i++) printf("%s\t",i)
printf("\n")
for (i = 0; i <= INDEX; i++) printf("%s\t",PH[i])
printf("\n")
for (i = 0; i <= INDEX; i++) printf("%s\t",PE[i])
printf("\n")
for (i = 0; i <= INDEX; i++) printf("%s\t",H[i])
printf("\n")
for (i = 0; i <= INDEX; i++) printf("%s\t",OH[i])
printf("\n")
for (i = 0; i <= INDEX; i++) printf("%s\t",AM[i])
printf("\n")
}
Algumas notas:
- A primeira linha (#! / usr / bin / awk) deve apontar para a localização do awk em sua máquina (tente
whereis awk
no prompt) - No bloco final, o \ t insere uma 'guia' entre os campos. Você pode substituí-lo por \ t \ t por 2 guias, uma vírgula 'ou' simplesmente um espaço '' para atender às suas necessidades.
-
Salve este script e, para usá-lo, simplesmente faça:
awk -f script.name.awk input.file.inp
Espero que isso resolva seu problema.