時間ごとの wc
awkか!awk使えばいいのんか!からですが、コメントにも書きましたが、結果的にどういった解答が欲しいのかがないのであくまで推測で進めます。
- ファイル名は 'YYYYMMDDHHMMSS.csv' とします。
- 時間ごとに行数をまとめたい。
以上のように仮定して、解くと以下のようになります。
#! /usr/bin/gawk -f
# 1hour_wc.awk
BEGIN {
for (i = 1; i < ARGC; i++) {
time = substr(ARGV[i], 1, 10);
if (!(time in prev_time)) {
wc_cmd = "wc -l " time "*.csv";
prev_time[time] = time;
while (wc_cmd | getline > 0) {
lines = $1;
}
close(wc_cmd);
print time " : " lines " lines.";
}
}
}
これを試すのにテストファイルを用意します。
$ wc *csv 10 10 21 20080806000845_aho.csv 100 100 292 20080806233612_aho.csv 1000 1000 3893 20080806234023_aho.csv 1110 1110 4206 合計
テストということで中身は seq コマンドで適当な数字が入っています。
では実行してみましょう。
$ nawk -f 1hour_wc.awk *csv 2008080600 : 10 lines. 2008080623 : 1100 lines.
こういうので良いのでしょうか? 手元に Solaris がないこともあって nawk での動作確認までは行っています。
スクリプトの中身は、既に wc をしてしまっている日付を配列に格納して、それらとマッチしない場合にのみ wc コマンドを実行するようにしています。




