使えそうなコマンドがあれば、随時更新していこうと思います。
もし、間違いなどありましたら、連絡いただけると助かります。
申し訳ないですが、コマンドを実行した結果は保証しません。ご自分の責任でお願いします。 <_(_ _)_>
「` `」で囲まれた部分は、囲まれた中をコマンドとして実行し、その結果を返すものです。 access_log を開いて、その中の空白で区切られた単語の区切りの7番目をawkによって抽出し( awk '{print $7}')、その結果を一意なものにしています。
上記のコマンドによってできた単語リスト(ここでは、ファイル名のリストを取得しているつもり)を繰り返し処理していきます。最初に、取得したファイル名を含む行数を「grep $x access_log | wc -l 」で取り出します。 wc の結果には改行が含まれるので 「tr -d '\n'」で改行を削除しています。「tr」コマンドの -d オプションは、その次にくる文字を削除するオプションです。オプションをつけずに2つ渡すと置換になります。
※ 「tr 'GET' 'POST'」とすると、最初の引数の各文字に対応する第2引数の文字が置換されます。つまり、 文章中に HTTP とある場合、この置換をかけると HSSP と変換されてしまいます。
ファイル中に現れる行数を最初に出力した後で、 echo でファイル名を出力しています。forループを抜けた後、これまで処理した結果を sort しています。 +0 オプションは、1番目の単語でソートするオプションです。 +3 とすると 4単語目でソートすることになります。 -r オプションは、逆順(降順)でソートするオプションです。 -n は、ソート項目を数字として判断するオプションです。
最後に、「head -10 」として 最初の10件を取り出しています。
[参考] Linuxサーバ Hacks P.16
「find」コマンドで、カレントディレクトリから .txtで終わるファイルを見つけ出します。見つかったファイルを echo で 元のファイル名 移動先 というように出力します。この結果を xargs で取り込み、 -n数字 オプションによって引数を2つとるようにします。
これを cp コマンドに引き渡すことで、echo で出力した場所にファイルをコピーすることができました。
find と grep で、拡張子が .java のファイルを検索します。マッチしたファイル名を sed に送り込み、/s 関数を使ってファイル名を置換したものを mv コマンドに見えるように出力します。その結果を パイプでつないで sh に渡します。
sed の -n オプションは読み込んだ行を表示しないというオプションです。 s//p 関数で .java 拡張子を持つファイル名を、 「mv 読み込みファイル名 マッチした部分.vm」 という出力になるように置換して、 p コマンドで出力しています。
s関数中にある & は 読み込んだファイル名を返す参照変数です。
[参考] 新TheUNIX SuperText[上]
find と grep で拡張子が .java のファイルを取得し、ファイルの中身を cat で表示します。その結果を sed に送り、キーワードのみを後方参照として取得できるようにしておきます。 s//p 関数で中で \1 を使ってマッチしたキーワードのみを出力するようにしています。