次の名前のログファイルがあります。
localhost_log_file.2017-09-01.txt
localhost_log_file.2017-09-02.txt
....
localhost_log_file.2017-10-30.txt
つまり、各ログファイルの形式は次のようになります。
localhost_log_file.YYYY-MM-DD.txt
2017-09-03と2017-10-08の間のすべてのログファイルを収集したいと思います。つまり、fromlocalhost_log_file.2017-09-03.txt
からlocalhost_log_file.2017-10-08.txt
。
私が今やっていることは、次のコマンドをそれぞれ個別に実行して3つの中間ファイルを生成することです。
for((i=3;i<=9;i++)) do cat localhost_log_file.2017-09-0$i.txt >> log1.csv ; done;
for((i=10;i<=30;i++)) do cat localhost_log_file.2017-09-$i.txt >> log2.csv ; done;
for((i=1;i<=8;i++)) do cat localhost_log_file.2017-10-0$i.txt >> log3.csv ; done;
その後、中間ファイルを次のように結合しました。
cat log1.csv log2.csv log3.csv> totallog.csv
もっと良い方法がありますか?
ベストアンサー1
中かっこ拡張を入れ子にできます。
短くて甘い:
cat localhost_log_file.2017-{09-{03..30},10-{01..08}}.txt > totallog.csv
一部のシステム(macOSなど)は以前のバージョンのBashを使用しており、中括弧拡張整数シーケンスから先行ゼロが削除されたため機能しません。 Linuxの場合、これはうまくいきます。