У меня есть сценарий ncl, который я модифицирую внутри сценария Perl, каждый раз, когда я запускаю сценарий Perl, а затем вызываю тот же сценарий ncl внутри сценария Perl. Я заметил, что каждый раз, когда я запускаю perl-скрипт, строки в ncl-скрипте постепенно переписываются вправо. Интересно, как далеко они уйдут вправо и будет ли работать скрипт ncl, если двигаться очень далеко вправо. Мне интересно, можно ли указать столбец, с которого начинать запись. Я понятия не имею, есть ли решение для этого, кроме ручного возврата строк назад. Ниже приведены изменения, внесенные мной в скрипт.
open($NCLSCRPT, " < /home/zmumba/DA/TMINTMAX/Scripts/10_PlotT2mMinMax.ncl") || die "open $NCLSCRPT: failed $! ($^E)";
@scrptlines=<$NCLSCRPT>;
foreach $scrptlines (@scrptlines) {
if ($scrptlines =~ /(^|\s+)a = addfile/) {
$scrptlines =~ s/\w+\.nc/Tmin.nc/g;
}
if ($scrptlines =~ /wks = gsn_open_wks/) {
$scrptlines =~ s/\w+_\d{2}/Tmin_$day/g;
}
$scrptlines =~ s/\w+ Temperature/Minimum Temperature/g;
if ($scrptlines =~ /Valid on/) {
$scrptlines =~ s/$valdate/${day}\/${month}\/${year}/g;
}
if ($scrptlines =~ /From 00z on/) {
$scrptlines =~ s/$wrffcr/T\+00H/g;
$scrptlines =~ s/$valdate/${day}\/${month}\/${year}/g;
}
}
close $NCLSCRPT;
open($NCLSCRPT, " > /home/zmumba/DA/TMINTMAX/Scripts/10_PlotT2mMinMax.ncl") || die "open $NCLSCRPT: failed $! ($^E)";
print $NCLSCRPT "@scrptlines\n";
close $NCLSCRPT;
Чтобы отдать должное, я добавляю часть текстового файла, который я обрабатываю по запросу @Håkon Hægland. В противном случае проблема решена.
begin
;Open input file.
;************************
DATADir = "./"
a = addfile(DATADir+"Tmax.nc","r")
T = wrf_user_getvar(a,"T2",0)
T = T-273.15
wrf_smooth_2d( T, 3 ) ; smooth T
;printVarSummary(T)
;exit
lat2d = a->XLAT(:,:)
lon2d = a->XLONG(:,:)
lat = lat2d(:,0) ; create classic 1D coordinate arrays
lon = lon2d(0,:)
lat@units= "degrees_north"
lon@units= "degrees_east"
lat!0 = "lat"
lon!0 = "lon"
lat&lat = lat
Подстановки регулярных выражений в принципе могут добавлять пробелы в начало каждой строки, но я этого не вижу. Единственная такая возможность в показанном коде будет в переменной
$day
-- если в ее начале есть пробел (или несколько) (чего в любом случае не должно быть), и если$validate
(которую он заменяет) стоит в начале своей строки. Но это не будет на всех строках...Пожалуйста, включите образец входного файла вместе с ожидаемым выходным файлом. См. минимальный воспроизводимый пример для получения дополнительной информации.