我前段时间制作了一个脚本,用于处理数周,数月甚至数年的每日数据。我需要做的一件事是删除第一个元素,否则我将在结果中得到一个重复的条目。该脚本可以创造奇迹。快进几个月,我需要制作一个相同的脚本,不同之处在于调用某些二进制文件和脚本来处理数据。我复制了脚本并进行了相关更改,保留了日期序列的生成和第一个元素的删除。当我运行这个新脚本时,当为第一个元素调用unset时,整个日期数组都不会被设置。
这是脚本:
#!/bin/sh
if [ "$1" = '' ] || [ "$3" = '' ]; then
echo -e "Uso:\t$0 <estacion> <inicio> <fin>"
echo
echo -e "\tEl argumento 'estacion' es el identificador de una de las estaciones en"
echo "maysculas (e.g. RMA1_FDC). Los otros dos--'inicio' y 'fin'--son fechas de la"
echo "forma AAAA-[M]M-[D]D, dondeA corresponde a un digito del año, M para el mes, y D"
echo "para el dia. Notese que el mes y el dia solo requieren un digito si el valor"
echo "para este campo es menor a diez. No es necesario poner '0' adelante del numero"
echo "en este caso."
echo
echo "Este programa genera datos en formato CSV (coma separated values) en la salida"
echo "estandar. Si desea guardarlos a un archivo, redirija la salida al mismo. Ej."
echo
echo "$0 RMA1_FDC 2018-7-1 2018-12-10 > registro.csv"
echo
exit -1
fi
PRECIPITACION_MODELO=2
PRECIPITACION_ESTACION=5
DIA_A=$2
FECHAS=$(seq $(date +%s -d $2) 86400 $(date +%s -d $3))
>&2 echo "Fechas = "${FECHAS[*]}
unset -v FECHAS[0]
>&2 echo "Fechas = "${FECHAS[*]}
echo "fecha,'delta precipitacion',corrida"
for d in ${FECHAS[@]}; do
DIA_B=$(date +%Y-%-m-%-d -d @$d)
>&2 echo "$DIA_A -- $DIA_B"
./getstationdata $1 $DIA_A $DIA_B $PRECIPITACION_ESTACION > estacion 2> /dev/null
./getwrfdata $1 $DIA_A $DIA_B $PRECIPITACION_MODELO A > pronostico 2> /dev/null
echo -n "$DIA_A,"
./delta-precipitacion 2> /dev/null | awk 'ORS=NR%3?" ":"\n"' | awk '{print $2 ",A"}'
./getwrfdata $1 $DIA_A $DIA_B $PRECIPITACION_MODELO B > pronostico 2> /dev/null
echo -n "$DIA_A,"
./delta-precipitacion 2> /dev/null | awk 'ORS=NR%3?" ":"\n"' | awk '{print $2 ",B"}'
./getwrfdata $1 $DIA_A $DIA_B $PRECIPITACION_MODELO C > pronostico 2> /dev/null
echo -n "$DIA_A,"
./delta-precipitacion 2> /dev/null | awk 'ORS=NR%3?" ":"\n"' | awk '{print $2 ",C"}'
./getwrfdata $1 $DIA_A $DIA_B $PRECIPITACION_MODELO D > pronostico 2> /dev/null
echo -n "$DIA_A,"
./delta-precipitacion 2> /dev/null | awk 'ORS=NR%3?" ":"\n"' | awk '{print $2 ",D"}'
DIA_A=$DIA_B;
DIA_B=$(date +%Y-%-m-%-d -d @$d)
done
rm -f estacion pronostico
请注意它说的部分
>&2 echo "Fechas = "${FECHAS[*]}
unset -v FECHAS[0]
>&2 echo "Fechas = "${FECHAS[*]}
我得到一系列数字,代表第一个“ echo”的日期,但有一个简单的“ FECHAS =”,第二个之后没有任何数字。我已经为此困扰了一个星期。有谁知道这是怎么回事?
答案 0 :(得分:1)
这是重现问题的简便方法:
data['Column A'] = data['Column A'].str[:-1] + '-' + data['Column A'].str[-1]
print (data)
# Column A
#0 ABC-1
#1 ABC-2
#2 ABC-3
#3 ABC-4
这将输出:
var="foo bar"
echo "The value is: ${var[*]}"
unset -v 'var[0]'
echo "The value is now: ${var[*]}"
之所以会发生这种情况,是因为该变量不是数组,只是bash允许您将常规变量视为具有索引0处的单个值的数组:
The value is: foo bar
The value is now:
输出:
var="foo bar"
echo "No index = $var"
echo "[0] = ${var[0]}"
echo "[1] = ${var[1]}"
如果在上面的示例中使用No index = foo bar
[0] = foo bar
[1] =
创建一个实际的数组,则会得到预期的结果:
var=("foo" "bar")