- ベストアンサー
質問!!もう一回です。(シェルスクリプト)
次のようなLOGファイルがあるとします。 日付 時間 区分 番号 08/03/06 21:11 RECV "6105.2280 08/03/06 21:11 CALL "6.6105.2280" 08/07/06 20:35 RECV "6.6105.2280" 08/07/06 20:35 CALL "6105.2280" 08/07/06 20:37 RECV "+81.6.6105.2280 08/08/06 13:52 SEND "47963212" そこで、「08/07/06」を引数で受けたら、06年8月7日以前の履歴が削除されるように作りたいです。 例えば、スクリプト名が「test」とすると、「$ test 08\/07\/06」になりますか。。。 これで、LOGファイルの中身は 「08/08/06 13:52 SEND "47963212"」だけが残ります。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
↓のようなものいいのかな? もっといい方法があるでしょうが、数分で作ったものなので参考程度で。 %cat test.log 08/03/06 21:11 RECV "6105.2280 08/03/06 21:11 CALL "6.6105.2280" 08/07/06 20:35 RECV "6.6105.2280" 08/07/06 20:35 CALL "6105.2280" 08/07/06 20:37 RECV "+81.6.6105.2280 08/08/06 13:52 SEND "47963212" %cat test #!/bin/sh LOGFILE=test.log awk -v ARGUMENT="$1" ' BEGIN{ THRESHOLD = substr(ARGUMENT,7,1) * 100000 \ + substr(ARGUMENT,8,1) * 10000 \ + substr(ARGUMENT,1,1) * 1000 \ + substr(ARGUMENT,2,1) * 100 \ + substr(ARGUMENT,4,1) * 10 \ + substr(ARGUMENT,5,1) } { CURRENT = substr($1,7,1) * 100000 \ + substr($1,8,1) * 10000 \ + substr($1,1,1) * 1000 \ + substr($1,2,1) * 100 \ + substr($1,4,1) * 10 \ + substr($1,5,1) if ( CURRENT > THRESHOLD ) { print } }' ${LOGFILE} %./test "08/07/06" 08/08/06 13:52 SEND "47963212" %./test "08/03/06" 08/07/06 20:35 RECV "6.6105.2280" 08/07/06 20:35 CALL "6105.2280" 08/07/06 20:37 RECV "+81.6.6105.2280 08/08/06 13:52 SEND "47963212"
その他の回答 (1)
- grape16
- ベストアンサー率55% (52/93)
下記の例は,ラインエディタのedでLOGファイルの内容を編集するものです。 edに渡す編集コマンドをsedで作っています。1行目から検索で見つかった行の前の行までを削除(d)して上書き(w)して終了(q)というコマンドをsedで生成しています。 3行目と4行目は,行末の「\」の直後で改行するようにしてください。 LOGファイルのファイル名はtest.logとしています。 使い方は $ test 08/07/06 のようになります。「08\/07\06」のようにしなくてもいいようにsedで「/」の前に\を入れています(「-e 's:/:\\/:g'」の部分)。 【スクリプトtestの内容】 #!/bin/sh echo $1 | /bin/sed -e 's:/:\\/:g' -e 's/\(.*\)/1,\/^\1\/-1d\ w\ q/' | /bin/ed -s test.log >/dev/null 2>&1