More from: sort

ファイルが大きすぎたorz

Linuxサーバーで自動的に作成しているファイルが作られていないとの連絡が来た。
調べてみるとファイルの先頭と最後だけが作られている。
ヘッダとフッタは固定文字列を出力しているため、中身だけが全く無い状態。
試しに手動で同じスクリプトを動かしてみると、中で使っているsortコマンドが/tmp以下に作るファイルがスペースが無くて作れないというエラーを吐いて処理が落ちた。
確かに基にしたファイルはいつになく大きいのでsortするにもいつも以上にディスクを必要としているようだ。
かと言って/tmpを含むファイルシステムを拡張するわけにもいかないので、テンポラリファイルの作成先を変更することにした。
それには環境変数”TMPDIR”を設定するか、sortに”-T”オプションでテンポラリファイル作成用ディレクトリを指定するかのどちらかが必要。
今回は”-T”オプションで容量に余裕のあるファイルシステム上のディレクトリを指定するようにしたら問題無くファイルが作成された。
いや、まさかあんな大容量のファイルを相手にすることになるとは想定外だったなぁ(汗)。

←クリックしてくれると嬉しいです。

awkのメモ

linuxサーバーのmaillogから下記の項目を抜き出す必要が出来た。
・端末のIPアドレス
・ユーザーアカウント
・端末名(名前解決が出来たもののみ)
しかも特定のネットワークからのアクセス分だけという条件付。

で、まずは/var/log/maillog*から特定のネットワークからの分だけを
#grep “ネットワークアドレス(xxx.yyy.zzz)” maillog* > hoge
でhogeというファイルに吐き出した。
次に
#cat hoge | grep pop | awk ‘NF=14{print $12,$13,$7}’ | sort +1 | uniq > hoge2.txt
を実行して結果をhoge2.txtというファイルに書き出した。

#grep “ネットワークアドレス(xxx.yyy.zzz)” maillog* | grep pop | awk ‘NF=14{print $12,$13,$7}’ | sort +1 | uniq > hoge2.txt
のように全部を一度に書いても同じ結果が得られたはず。

awkの中でやっているのは
フィールド数が14ならば(NF=14)12番目と13番目と7番目の項目を書き出す。
ということ。
これで(ほぼ)望みどおりの結果が得られ、数万行にのぼるログファイルから10行少々を切り出すことが出来た。

←クリックしてくれると嬉しいです。