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