История изменений
Исправление kostik87, (текущая версия) :
#!/bin/sh
IN=/tmp/in
LINES=`wc -l $IN`
LINES=${LINES/ */}
LINE=`sed -n 1p $IN`
NUM_PREV=${LINE/,*/}
STR_PREV=${LINE/*,/}
for i in `seq 2 $LINES`
do
LINE=`sed -n ${i}p $IN`
NUM_CUR=${LINE/,*/}
STR_CUR=${LINE/*,/}
if [ ${STR_CUR} = ${STR_PREV} ]
then
NUM_PREV=$((${NUM_PREV} + ${NUM_CUR}))
else
echo ${NUM_PREV},${STR_PREV}
NUM_PREV=${LINE/,*/}
STR_PREV=${LINE/*,/}
fi
done
echo ${NUM_PREV},${STR_PREV}
В файле /tmp/in указанные вами входные данные:
123,abcdf
100,abcdf
200,abcdf
100,xyzf
Исходная версия kostik87, :
#!/bin/sh
IN=/tmp/in
LINES=`wc -l $IN`
LINES=${LINES/ */}
LINE=`sed -n 1p $IN`
NUM_PREV=${LINE/,*/}
STR_PREV=${LINE/*,/}
for i in `seq 2 $LINES`
do
LINE=`sed -n ${i}p $IN`
NUM_CUR=${LINE/,*/}
STR_CUR=${LINE/*,/}
if [ ${STR_CUR} = ${STR_PREV} ]
then
NUM_PREV=$((${NUM_PREV} + ${NUM_CUR}))
else
echo ${NUM_PREV},${STR_PREV}
NUM_PREV=${LINE/,*/}
STR_PREV=${LINE/*,/}
fi
done
echo ${NUM_PREV},${STR_PREV}