プロが教える店舗&オフィスのセキュリティ対策術

みなさん、こんにちは。
このサイトにはお世話になっています。ありがとうございます。

今日は初めて質問をさせていただきます。
サーバーのログを集計処理しているのですが、
最近、ファイル容量が肥大していて20ギガを超えてしまいました。
数年前、前任者が作成した集計処理プログラムでは、
20ギガまでしか処理が出来ないことが発覚しました。
そこで、5行に1行位の割合で行を間引き削除することを考えています。
コマンド等で適当なものは存在するのでしょうか?

よろしくお願いいたします。

A 回答 (3件)

標準的なコマンドでやってみました。

(cygwinはないのでFreeBSD5.5で)

cat -n [oldfile] | grep -v '^ *[0-9]*[05][^0-9]' | cut -f 2- > [Newfile]

ファイルがたくさんあるディレクトリで、grep を-vオプション無しで実行すると、どんな動作になるかイメージできると思います。
> ls -l | cat -n - | grep '^ *[0-9]*[05][^0-9]'
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

[0-9]*[05][^0-9]の具体的な入力例がわかりません。

お礼日時:2006/09/19 11:11

#1の方の回答の変形で、


awk '{ if (NR % 5 != 0) print }'

あるいは簡単に

awk 'NR%5!=0'

でもいいです。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。

この回答で解決しました。本当に助かりました。
こういった用途のコマンドについて詳しく解説している
サイトや本があれば教えていただけるとうれしいです。

お礼日時:2006/09/19 11:14

awk '{ if (NR % 5 == 0) print }'


で 5, 10, 15, 20, ... 行目が出力できますね.
ちょっと遊んで
sed -ne 'p;N;N;N;N'
だと 1, 6, 11, 16, ...行目が出力できます.
    • good
    • 2
この回答へのお礼

早速の回答ありがとうございます。

出来れば、1,2,3,4,6,7,8,9,11,12,13,14,16,...
を出力したいのですが、可能でしょうか?
例えば、10000行を8000行にしたいのです。

よろしくお願いいたします。

お礼日時:2006/09/18 17:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!