の続きなのですが、
URL,ファイル名(日本語)という組み合わせのリストファイル「list.csv」があり、上記Qでご回答いただいた方法で、アクセスログファイル「access.log」に含まれるURLをカウントして、ファイル名(日本語)というファイル(中身はカウントされた数)という状態になっています。
これを毎日カウントして、
URL,ファイル名,1,2,3,4…(日々の数字)
というcsvファイルに最終的にまとめたいのですが、できるだけ簡潔な方法をお教え下さい。引き続きよろしくお願いいたします。
ディレクトリ構成
script.sh
access.log
日本語のファイル名1(中身は、毎日のアクセス数が,区切りで表示)
日本語のファイル名2
|
list.csv
accesslog.csv<最終的にまとめるcsv
すみません。質問はシェルだと思いますが、自分の勉強もかねて・・・コマンドを利用した集計を紹介させていただきます。
awk -F, '{print($1 "," $2);system("cat " $2);print("@")}' list.csv |tr "\n" "," | sed 's/,@,/\n/g' > accesslog.csv
※ @ をセパレータとして利用しています。
以下のコマンドを順に実行していただければ、どのような処理をしているか、理解しやすいと思います。
awk -F, '{print($1 "," $2);system("cat " $2);print("@")}' list.csv
awk -F, '{print($1 "," $2);system("cat " $2);print("@")}' list.csv |tr "\n" ","
awk -F, '{print($1 "," $2);system("cat " $2);print("@")}' list.csv |tr "\n" "," | sed 's/,@,/\n/g'
参考になれば幸いです。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/?ST=o...
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230906/?ST=o...
前のシェルスクリプトを参考に、シェルスクリプトで作成してみました。
#!/bin/sh
IFS=","
rm -f accesslog.csv
while read URL FILE
do
cnt=`cat $FILE | tr "\n" ","`
echo $URL $FILE $cnt | sed 's/ /,/g' >> accesslog.csv
done < list.csv
コメント(0件)