Parece que não consigo entender por que um script que estou executando até agora falha em um arquivo de entrada um pouco maior.
Se eu executar o script em um arquivo que seja 820000x75 (linhas por colunas), o script funcionará bem, mas se eu executá-lo com um arquivo de 1,4 milhões x 75, o script não conseguirá imprimir nada, com o apenas mensagem de erro sendo "Matada". Estou correndo em algum limite de tamanho de awk com a minha entrada.
Aqui está o script, que deve ler apenas um arquivo de números de ponto flutuante e imprimi-los de forma diferente em outro arquivo:
BEGIN{ i=1; j=1
getline
getline
}{
if($3 ~ /MO/ ){
i=1
if(0=="1"){print i,j}
j++
}
else {
# substr(string, start [, length ])
if(length($0)>"61"){
Mat[i,j]=sprintf("%.8g",substr($0,1,15)) ; i++
Mat[i,j]=sprintf("%.8g",substr($0,16,15)); i++
Mat[i,j]=sprintf("%.8g",substr($0,31,15)); i++
Mat[i,j]=sprintf("%.8g",substr($0,46,15)); i++
Mat[i,j]=sprintf("%.8g",substr($0,61,15)); i++
}
else if(length($0)>"46"){
Mat[i,j]=sprintf("%.8g",substr($0,1,15)) ; i++
Mat[i,j]=sprintf("%.8g",substr($0,16,15)); i++
Mat[i,j]=sprintf("%.8g",substr($0,31,15)); i++
Mat[i,j]=sprintf("%.8g",substr($0,46,15)); i++
}
else if(length($0)>"31"){
Mat[i,j]=sprintf("%.8g",substr($0,1,15)) ; i++
Mat[i,j]=sprintf("%.8g",substr($0,16,15)); i++
Mat[i,j]=sprintf("%.8g",substr($0,31,15)); i++
}
else if(length($0)>"16"){
Mat[i,j]=sprintf("%.8g",substr($0,1,15)) ; i++
Mat[i,j]=sprintf("%.8g",substr($0,16,15)); i++
}
else if(length($0)>"1"){
if($0!="0"){ Mat[i,j]=sprintf("%.8g",substr($0,1,15)) ; i++ }
else{print "scratch.scr.readMO: a zero element was found!"}
}
else if(length($0)=="0"){ print "scratch.scr.readMO: error-0"}
else{ print "scratch.scr.readMO: error-2"}
}
}
END{
if(0=="1"){print (i-1),j}
for (x=1; x<=(i-1); x++)
{ for (y=1; y<=j; y++)
{ printf "%.8g %s ", Mat[x,y], " " > "MOs_"label".txt"
}
if (x<(i-1)) {printf "\n " > "MOs_"label".txt" }
}
}
E aqui está o comando que estou usando para executar isso:
gawk -v label=P -f script file_to_process