0

私はスクリプトを持っています:

#! /usr/bin/ksh

TODAY=$(date +%Y%m%d)
list=$1
FILE_NAME="IMEI.txt"
OUTFILE="${list}_list.out"

##########################################
if [ -z ${list} ]
then
    echo "Use the syntax ./add_imei.sh <list number>"
    exit 0
fi

while read LINE
do
    IMEI=`echo $LINE | 
        sed 's/ //g' | sed -e 's/[^ -~]//g'`
    END_SERIAL=`echo $IMEI |
        cut -c9- | sed 's/ //g' | 
                sed -e 's/[^ -~]//g'`
    echo \
        "CRE:EQU,${IMEI}0,${END_SERIAL},${list},,${TODAY};" \
            >> ${OUTFILE}i
done < "${FILE_NAME}"

スクリプトは、ファイルのすべての行から 14 桁の数字を取得IMEI.txtし、次のようなコマンドを作成します。

CRE:EQU,777777777777770,777777,0,,20130611;

別の出力ファイルに保存します。かなり単純な仕事。すべて正常に動作していますが、出力ファイルを調べると、次のように表示されます。

CRE:EQU,444444444444440,444444,0,,20130611;
CRE:EQU,555555555555550,555555,0,,20130611;
CRE:EQU,666666666666660,666666,0,,20130611;
CRE:EQU,777777777777770,777777,0,,20130611;
CRE:EQU,0,,0,,20130611; <-- *)

*)入力行の最後の空の行についても(入力ファイルの保存中に最後のEnterキーを押すと)、出力ファイルに不要なコマンドが作成されます。これを解決するための迅速で短くスマートな方法はありますか?

4

1 に答える 1

4
while read LINE
do
    [ -z "$LINE" ] && continue
    IMEI=$(echo $LINE | sed 's/ //g' | sed -e 's/[^ -~]//g')
    END_SERIAL=$(echo $IMEI | cut -c9- | sed 's/ //g' | sed -e 's/[^ -~]//g')
    echo "CRE:EQU,${IMEI}0,${END_SERIAL},${list},,${TODAY};" >> ${OUTFILE}i
done < "${FILE_NAME}"

行が空の場合は、ループの次の繰り返しに進みます。

またはsed、ファイルをループに送る前に空白行 (空白とタブのみを含む) を削除します。

sed '/^[     ]*$/d' "$FILE_NAME" |
while read LINE
do
    IMEI=$(echo $LINE | sed 's/ //g' | sed -e 's/[^ -~]//g')
    END_SERIAL=$(echo $IMEI | cut -c9- | sed 's/ //g' | sed -e 's/[^ -~]//g')
    echo "CRE:EQU,${IMEI}0,${END_SERIAL},${list},,${TODAY};" >> ${OUTFILE}i
done
于 2013-06-11T13:56:41.907 に答える