今年初

執筆者:

カテゴリ:

データ解析のため,日付が変わりそうである.トレードオフがあるが,凝り症のため,シェルスクリプトにて作業をほぼ自動化.有効データ範囲のみのデータを切り出すスクリプトが一番苦労した.そのわりにはヘボいが,備忘のため掲載.

!/bin/sh

# Time-stamp: <06/01/11 02:12:13 uep>
# データファイルの中心のみを抽出するスクリプト.
# 意味のないデータの最初と最後を切り落すため,
# また,全ての時間スケールで同じデータ数抽出するため作成.
# このスクリプトはxtを生成してから使用する.
#
# たとえば7行のデータから中心の3行のみ抽出する場合,
# ↓の図のSTARTからENDまで抽出する.
#
#  ---------------------------------
#  ---------------------------------
#  --------------------------------- START
#  ----------CENTER-----------------
#  --------------------------------- END
#  ---------------------------------
#  ---------------------------------

ERROR=0
CURRENT=0
LINE=

# $#には変数の数が代入される.
# 引数チェック
if [ ! $# -eq 3 ]; then
    echo "Usage: grepline.sh filename start end"
    ERROR=1
    exit $ERROR
else
    # ファイルが存在するかチェック
    if [ ! -r "$1" ]; then
        echo "Cannot find file $1" 1>&2
        ERROR=1
    else
        ALLLINE=`wc -l $1 | cut -f1 -d' '`
#       HEAD=`head -1 $1 | cut -f2 -d'='`
#       SCALE=`expr $HEAD : "\(.*\)(microsec)"`
        WIDTH=`expr $3 - $2`
        while [ 1000 -gt "$WIDTH" ]
        do
            WIDTH=`expr $WIDTH \* 10`
        done
        START=`expr $ALLLINE / 2 - $WIDTH / 2`
        END=`expr $ALLLINE / 2 + $WIDTH / 2 - 1`
#       echo $START
#       echo $END
        IFS=
        # IFSは組込み変数.無視する文字はない
        # デフォルトでは,空白,タブ,改行が無視される.
        while read LINE
        do
            CURRENT=`expr $CURRENT + 1`
            echo "Now Reading $1 ..." 1>&2
            if [ "$CURRENT" -gt "$START" ]; then
                if [ "$CURRENT" -lt "$END" ]; then
                    echo "$LINE"
                fi
            fi
        done <"$1"
    fi
fi

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です