2

次のようなログファイルがあります。

www.domainone.com FIX 3.3 12.12.123.1
www.domainone.com FIX 3.4 12.12.123.1
www.domainone.com FIX 2.4 12.12.123.1
www.domaintwo.com MAX 1.4 44.15.153.5
www.domaintwo.com MAX 3.2 44.15.153.5
www.domaintwo.com MAX 3.9 44.15.153.5
www.domaintwo.com MAX 12.4 44.15.153.5
www.domainthree.com NAN 3.4 34.45.144.7
www.domainthree.com NAN 2.4 34.45.144.7
www.domainthree.com NAN 3.2 34.45.144.7
www.domainthree.com NAN 3.3 34.45.144.7
www.domainthree.com NAN 1.4 34.45.144.7

そして、そのログファイルを最後の列で分割するgrep、awk、sed、またはその他のbashコマンド/スクリプトを実行したいので、結果はドットなしのIPを使用して名前が付けられた3つのログファイルになります。したがって、そのうちの1つは34.45.144.7.logになり、

www.domainthree.com NAN 3.4 34.45.144.7
www.domainthree.com NAN 2.4 34.45.144.7
www.domainthree.com NAN 3.2 34.45.144.7
www.domainthree.com NAN 3.3 34.45.144.7
www.domainthree.com NAN 1.4 34.45.144.7

私はそれらをソートし、awkを使用して元のログからいくつかの列を削除することができましたが、1つの列を使用してファイルに分割する方法がわかりませんでした。

4

3 に答える 3

4

IPが常に4番目の列である場合は、次を使用できます。

awk '{ filename=$4".log"; if (prev && (filename != prev)) close(prev); print >>filename; prev=filename }' ips.log

または@EdMortonによると、さらに良い

awk '{ print >>($4".log"); close($4".log") }' ips.log

これにより、行全体が4番目の列(IP)+".log"で構成されるファイルに出力されます。

これはUbuntu12.04とGNUawk3.1.8で使用されます。

于 2012-11-28T14:41:26.847 に答える
1

したがって、結果は、ドットなしのIPを使用して名前が付けられた3つのログファイルになります。

awk '{f=$4; gsub(/\./,"",f);print > f".log"}' ips.log
于 2012-11-28T14:46:43.060 に答える
1

@OlafDietscheのリクエストで:

awk '{ filename=$4".log"; if (filename != prev) close(prev); print >filename; prev=filename }' ips.log

コメントがそれほど長く引きずり出されるとは思っていませんでした。

于 2012-11-29T22:06:59.167 に答える