ファイルに行番号を付けて出力する
スクリプト名: linenum.sh
書式: linenum.sh ファイル名
目的: ファイルに行番号を付けて出力する
戻り値: 成功:0 エラー:9
#!/bin/sh export LANG=C LC_ALL=C _FILE=$1.count _LINE_NUM=1 _IFS_ORIG=$IFS [ -f "$1" -a -r "$1" ] || exit 9 #バックスラッシュをエスケープ文字と認識させないためにエスケープする sed 's#\\#\\\\#g' $1 > $_FILE || exit 9 #最終行の行番号の桁数を求める _MAX=$(( $(wc -l "$_FILE" | awk '{print $1}' | wc -c | awk '{print $1}') - 1 )) IFS= while read _LINE_DATA; do IFS="$_IFS_ORG" #現在の行番号の桁数を求める _FIG=$(( $(echo $_LINE_NUM | wc -c) -1 )) #行番号の桁数が変わっていなければスルー if [ "$_FIG_OLD" != "$_FIG" ]; then _ZERO= _ZERO_FIG=1 #最大行番号の桁数に合うまで0の個数を増やす while [ $_ZERO_FIG -le $(( $_MAX - $_FIG )) ]; do _ZERO="0$_ZERO" _ZERO_FIG=$(( _ZERO_FIG + 1 )) done fi echo "$_ZERO$_LINE_NUM: $_LINE_DATA" #次行の処理の用意 _LINE_NUM=$(( _LINE_NUM + 1 )) _FIG_OLD=$_FIG IFS= done < $_FILE rm -f $_FILE