これまでうまく機能していたスクリプトが少し大きい入力ファイルでは失敗する理由を理解できないようです。
820000x75(1行ずつ)ファイルでスクリプトを実行すると、スクリプトは正常に実行されますが、140000x75ファイルでスクリプトを実行すると、スクリプトは何も印刷できず、メッセージが「killed」という唯一のエラーを表示します。私の入力がawkのサイズ制限に達しましたか?
以下はスクリプトです。浮動小数点ファイルを読み、別の方法で別のファイルに印刷する必要があります。
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" }
}
}
以下は、実行に使用するコマンドです。
gawk -v label=P -f script file_to_process
答え1
このメッセージは、Killed
通常、リソースがなくなった(メモリ不足)またはクォータがなくなった(メモリ不足)ためにカーネルがプロセスを終了したことを示します。許可されたメモリ使用量)。通常、カーネルからのメッセージを確認するためにシステムログを注意深く読んで、カーネルがプロセスを終了する必要があると判断した理由を理解することができます(/var/log/messages
またはプロセスが終了するのを見たときにそこにいた場合はrun)。dmesg