만 잘 나타내므로 확인해보십시오. 나는 전산 재료 과학에서 학부 논문을 시작하고 데이터 분석을 준비하는 데 도움이되는 몇 가지 스크립트를 작성하려고합니다.GAWK 및 Bash 스크립트에서 Gnuplot을 호출하면 첫 번째 플롯 인 플롯
나는 기본적으로 (4 열로 정렬 된) 일부 데이터를 취하여 그 중 두 개를 잡아 GNUPLOT으로 그려 줄 GAWK 스크립트를 준비하고있다. 이를 위해 여러 timestep과 관련 데이터가있는 데이터 파일을 읽은 다음 파일을 각 timestep의 개별 .dat 파일로 분할합니다.
거기에서 GNUPLOT에 대한 기본 입력 스크립트를 생성하고 데이터 파일에서 발생하는 각 timestep을 플로트합니다.
문제는 어떤 이유로 생성 된 모든 플롯이 정확히 동일한 플롯 (이 경우 항상 항상 첫 번째 단계)이지만 올바른 타임 스텝으로 저장된다는 것입니다.
나는 스크립트를 통해 이미 각 변수/파일 이름을 추적하고 마지막으로 스크립트에서 GNUPLOT을 호출하여 문제가 발생했음을 확인했습니다. 내 시스템 명령을 꺼내서 for 루프에서의 gnuplot를 호출하는 간단한 bash는 스크립트 작성 :
#!/bin/bash
for file in ./*gnu
do
gnuplot $file
done
을 그리고 여전히 플롯 모두가 같은 같은 문제가 발생합니다. 그런 다음 .gnu 파일이 들어있는 디렉토리의 명령 줄에서 gnuplot * gnu 명령을 실행하면 제대로 작동합니다.
내가 플러시 할 필요가있는 버퍼가 있는지, 아니면 그냥 놓친 것일까 요?
GAWK 스크립트는 다음과 같습니다. 나는 아직도 이것을 처음 접했고, 그래서 당신이 약간의 건설적인 비판으로 대본에 대해 논평하고자한다면, 나는 또한 그것을 크게 높이 평가할 것이다.
이# Time-averaged data for fix rdf
# TimeStep Number-of-rows
# Row c_allrdf[1] c_allrdf[2] c_allrdf[3]
500 100
1 0.005 0 0
2 0.015 0 0
3 0.025 0 0
4 0.035 0 0
5 0.045 0 0
6 0.055 1.16597 0.00133333
7 0.065 2.08865 0.00466667
8 0.075 1.56958 0.008
9 0.085 0.733433 0.01
10 0.095 0.587288 0.012
600 100
1 0.005 0 0
2 0.015 0 0
3 0.025 2.79219 0.000666667
4 0.035 2.86766 0.002
5 0.045 0 0.002
6 0.055 0.582985 0.00266667
7 0.065 2.08865 0.006
8 0.075 0.62783 0.00733333
9 0.085 0.488955 0.00866667
10 0.095 1.17458 0.0126667
일반적으로 각 시간 단계 섹션에서 데이터의 100 개 세트있다,하지만 난 당신 때문에 여기 단축 거라고 생각 :
#!/opt/local/bin/gawk -v inputf=$1 -f
# Write gnuplot files and plot RDF data
function plot_rdf(timestep, Load_RDF_dat)
{
# Set number of digits in filenames to 6 so data is organized
if (timestep < 10){
pad_timestep="00000"timestep;
}
else if (timestep < 100){
pad_timestep="0000"timestep;
}
else if (timestep < 1000){
pad_timestep="000"timestep;
}
else if (timestep < 10000){
pad_timestep="00"timestep;
}
else if (timestep < 100000){
pad_timestep="0"timestep;
}
else{
pad_timestep=timestep;
}
# Give output filenames
gnu_file="plot_RDF_"pad_timestep".gnu";
png_file="RDF_"pad_timestep".png";
# Create input files for gnuplot
print "set output \""png_file"\"" >> gnu_file;
print "set terminal png" >> gnu_file;
print "plot './"Load_RDF_dat"' u 1:2" >> gnu_file;
close(gnu_file);
system("gnuplot "gnu_file);
}
# Main part of script
{
# Parse the RDF data and save it to GNUPLOT readable files
while(getline < inputf){
if ($1 == "#"){
# skips the three commented header lines
next;
}
else if (NF == 2){
timestep=$1;
bin_num=$2;
print "Reading timestep "timestep;
RDF_dat="RDF_"timestep".dat";
next;
}
else if (NF == 4){
print $2" "$3 >> RDF_dat;
if ($1 == bin_num){
plot_rdf(timestep, RDF_dat);
close(RDF_dat);
}
next;
}
}
close(inputf);
close(RDF_dat);
}
내가에서 읽고 있어요 데이터 파일의 조각이다 아이디어를 얻었 어.
"마지막으로 문제가 GNUPLOT을 스크립트에서 호출하는 것으로 결정되었습니다."- 결론이 얼마나 이상하다고 생각하니? 문제는 스크립트에서 * gnuplot *을 호출하지 않는 것입니다. –