-1

/home/myuser/logs過去 5 日間の次のログ ファイルを含むディレクトリ ( ) があります。

applogs_20130402.txt
applogs_20130401.txt
applogs_20130331.txt
applogs_20130330.txt

すべての「applog」の各行の構造は同じで、データが異なるだけです。

<timestamp> | <fruit> | <color> | <cost>

たとえば、次のapplogs_20130402.txtようになります。

23:41:25 | apple | red | 53
23:41:26 | kiwi | brown | 12
23:41:29 | banana | yellow | 1023
... (etc., every line is pipe delimited like this)

5 つのログ ファイルすべてのすべてのログ エントリ (構造化された、パイプ区切りの行) を、すべてのタイムスタンプが時系列順に並べられた 1 つのファイルに結合する 1 つの "マスター ログ" を作成したいと考えています。さらに、タイムスタンプにも反映された日付が必要です。

たとえば、applogs_20130402.txtapplogs_20130401.txtがディレクトリ内の唯一の 2 つの applog であり、両方ともそれぞれ次のように見えた場合:

applogs_20130402.txt:
=====================
23:41:25 | apple | red | 53
23:41:26 | kiwi | brown | 12
23:41:29 | banana | yellow | 1023

applogs_20130401.txt:
=====================
23:40:33 | blueberry | blue | 4
23:41:28 | apple | green | 81
23:45:49 | plumb | purple | 284

次に、masterlog.txt次のようなファイルが必要です。

2013-04-01 23:40:33 | blueberry | blue | 4
2013-04-01 23:41:28 | apple | green | 81
2013-04-01 23:45:49 | plumb | purple | 284
2013-04-02 23:41:25 | apple | red | 53
2013-04-02 23:41:26 | kiwi | brown | 12
2013-04-02 23:41:29 | banana | yellow | 1023

私は Ubuntu を使用しており、Bash、python、perl にアクセスでき、どのソリューションを使用するかは好みません。通常は「最善の試み」を試みて投稿しますが、Linux でこのようなデータの集計を行ったことはありません。明らかに、上記の例とは異なり、ログは数千行のサイズです。したがって、すべてを手動で行うことはオプションではありません;-) よろしくお願いします!

4

2 に答える 2

1

次のように、コマンド ラインから Perl をsortと一緒に使用できます。

perl -n -e 'printf "%d-%02d-%02d %s", $ARGV =~ m/_(\d{4})(\d\d)(\d\d)/, $_;' *.txt | sort -n

perlwith を呼び出す-nと、プログラムが a でラップwhile (<>) { }されます。この場合は、 の内容です-e ''。その中にprintf現在の行 ( ) があり、その前に に保存され$_ているファイル名から日付を入れます。年、月、日を取得するために正規表現を使用します。これは、 からのリスト コンテキストにより便利に返されます。$ARGVm//printf

このプログラムには、フォルダー内のすべての txt ファイルを渡します。結果は、-n フラグを使用して行を数値順にソートするコマンド ライン ツール sort にパイプされます。

于 2013-04-03T19:05:32.010 に答える
0

Just for the sake of completeness, here is a (g)awk one-liner to accomplish the same:

gawk '{ printf "%s %s\n", gensub(/.+_([0-9]{4})([0-9]{2})([0-9]{2}).+/, "\\1-\\2-\\3", "", FILENAME), $0 }' applogs_* | sort
于 2013-04-04T11:04:25.140 に答える