sed / awkを使用してこのログエントリを正しい形式のcsvファイルに変換できますか?私はsed / awkを使ってこれを行ういくつかの方法を試しました。残念ながら私はできません。 Perlでやる前に。 AWK / sedまたはbashでもこれは可能ですか?
Jan 21 11:10:45 hostname.internal.nl THREAT 2015/01/21 11:10:44 critical 5 reset-both outside 10.10.10.10 inside 10.16.61.4 tcp 39898 80 web-browsing any Bash Remote Code Execution Vulnerability(36731)
このように
Date | Hostname | Threat | DATE+time | Critical/High | Count | --- | External IP | Internal IP | TCP/UDP | Port | External Port| Category | Vulnerability
Jan 21 11:10:45 | hostname.internal.nl | THREAT | 2015/01/21 11:10:44 | critical 5 reset-both | outside 10.10.10.10 | inside 10.16.61.4 | tcp 39898 | 80 | web-browsing | 4any Bash Remote Code Execution Vulnerability(36731)
答え1
はい、Bashでこれを行うことができますが、なぜそれを行うのかわかりません。純粋なbashソリューションは次のとおりです。
$ while read -r mon day time host threat date time crit count sugg out exip \
in inip tcp port export cat vuln; do
printf "%s | " "$mon $day $time" "$host" "$threat" "$date $time" \
"$crit $count $sugg" "$out $exip" "$in $inip" "$tcp \
$port" "$export" "$cat" "$vuln"
done < file; printf "\n"
Jan 21 11:10:44 | hostname.internal.nl | THREAT | 2015/01/21 11:10:44 | critical 5 reset-both | outside 10.10.10.10 | inside 10.16.61.4 | tcp 39898 | 80 | web-browsing | any Bash Remote Code Execution Vulnerability(36731) |
Perlまたはawkでより良い方法を提供できますが、フィールドをどれだけ正確に定義するかによって異なります。質問をより詳細に更新したら(たとえば、キーフィールドには常に3つの単語がありますか?入力で常に同じものが何であるか、何が変更できるかを知る必要があります)、より良いソリューションを提供できます。
答え2
入力ラインの種類が同じ場合は、次のことができます。
#!/bin/bash
LOG="/root/1.txt"
echo "Date | Hostname | Threat | DATE+time | Critical/High | Count | --- | External IP | Internal IP | TCP/UDP | Port | External Port | Category | Vulnerability" > 1.csv
< $LOG awk '{print $1" "$2" "$3 " | " $4 " | " $5 " | " $6" "$7 " | " $8" "$9" "$10 " | " $11" "$12 " | " $13" "$14 " | " $15" "$16 " | " $17 " | " $18 " | " $19" "$20" "$21" "$22" "$23" "$24}' >> 1.csv
入力する:
Jan 21 11:10:45 hostname.internal.nl THREAT 2015/01/21 11:10:44 critical 5 reset-both outside 10.10.10.10 inside 10.16.61.4 tcp 39898 80 web-browsing any Bash Remote Code Execution Vulnerability(36731)
Jan 22 11:12:45 hostname2.internal.nl THREAT2 2015/01/22 12:10:44 critical2 52 reset-both2 outside2 10.10.10.12 inside2 10.16.61.42 udp 39899 82 web-browsing2 any2 Bash Remote Code Execution Vulnerability(36731)2
出力:
Date | Hostname | Threat | DATE+time | Critical/High | Count | --- | External IP | Internal IP | TCP/UDP | Port | External Port | Category | Vulnerability
Jan 21 11:10:45 | hostname.internal.nl | THREAT | 2015/01/21 11:10:44 | critical 5 reset-both | outside 10.10.10.10 | inside 10.16.61.4 | tcp 39898 | 80 | web-browsing | any Bash Remote Code Execution Vulnerability(36731)
Jan 22 11:12:45 | hostname2.internal.nl | THREAT2 | 2015/01/22 12:10:44 | critical2 52 reset-both2 | outside2 10.10.10.12 | inside2 10.16.61.42 | udp 39899 | 82 | web-browsing2 | any2 Bash Remote Code Execution Vulnerability(36731)2
答え3
私はこれがS3 Cloudfrontからログファイルを収集してGoogle Driveにロードするのに非常に役立つことを知りました。
私はhomebrew awscliを使用してインストールした後、Mac-Osでawscliを使用しています。私は次のコマンドを実行しました。
aws s3 sync s3://bucketname/domain/ .
バケットはクラウドフロントエンドログ(クラウドフロントエンド編集でこの機能をオンにしました)で埋められ、すべてのファイルは自分のローカルコンピュータにインポートされます。 .gzファイルを解凍してテキストファイルを取得しました。
次に、同じフォルダに以下のようにfind + execコマンドを使用して大きなログファイルを構築します。その後、ログをcloudfrontログ形式に分割し、カンマを区切り文字としてawkからCSVファイルを生成しました。 CSVはいくつかのピボット分析のためにGoogleドライブにアップロードされ、誤ったエッジと欠落しているファイルを見つけるのに役立ちました。
ここに私が使用するbashスクリプトがあります:
`#!bash/bin
#Join Logs into one Big File using cat , if there are any default headers on your files . you need to remove them
FILE_NAMES_START = 'E1I*'
find . -type f -name FILE_NAMES_START -exec cat {} + >> big_log_file.txt
#Output Log File
LOG="big_log_file.txt"
echo "DATE , TIME , X-Edge-Location , SC-Bytes , Client-IP , Method , Cs-Host , File-URI , HTTP Status , Referer , User Agent , URI Query , Cookie-Id , Edge-Result , Edge-Request-ID , Host Header , Protocol , Bytes , Time Taken , X-Forwader , SSL Protocol , SSL Cipher , CDN-Result-Type" >> csv_data.csv
< $LOG awk '{print $1 " , " $2" , " $3 " , " $4 " , " $5 " , " $6 " , " $7 " , " $8 " , " $9 " , " $10 " , " $11 " , " $12 " , " $13 " , " $14 " , " $15 " , " $16 " , " $17 " , " $18 " , " $19 " , " $20 " , " $21 " , " $22 " , " $23 " , " $24}' >> big_csv_file.csv`
txtファイルとこのbashコードが同じライブラリにあることを確認するか、必要なスクリプトをスクリプトに追加してください。
csv> 100MbはGoogleスプレッドシートでは正しく機能しません。