いくつかのパケットフィルタログを分析していますcolumn -t
。文字列フィールド。
私の元のデータは次の行で構成されています。
2018:01:24-09:31:21 asl ulogd[24090]: id="2103" severity="info" sys="SecureNet" sub="ips" name="SYN flood detected" action="SYN flood" fwrule="50018" initf="eth0" srcmac="12:34:56:78:90:ab" dstmac="cd:ef:01:23:45:67" srcip="192.168.1.123" dstip="151.101.65.69" proto="6" length="52" tos="0x00" prec="0x00" ttl="128" srcport="59761" dstport="80" tcpflags="SYN"
次の方法を使用して、データをカンマ区切り(CSV)形式に変換します。
grep -EHr "192\.168\.1\.123" |
cut -d':' -f2- |
awk -F '"' 'BEGIN{
OFS=",";
print "name","action","srcip","srcport","dstip","dstport","protocol","tcpflags"
}
{
print $10,$12,$22,$36,$24,$38,$26,$(NF-1)
}'
これはうまく機能し、次の出力を生成します(IPアドレスがすべて変更され、実際にこのサイトに内部ホストが溢れていません)。
name,action,srcip,srcport,dstip,dstport,protocol,tcpflags
SYN flood detected,SYN flood,192.168.1.123,59761,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,59764,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,59769,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,59771,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,59772,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,59890,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,60002,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,60005,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,60006,151.101.65.69,80,6,SYN
何らかの理由でcolumn
表示テーブル出力(-t
)を使用するたびに、元のデータに改行がない最初の列の後に改行が追加されます。たとえば、
$ cat mydata.csv | column -s ',' -t
name
action srcip srcport dstip dstport protocol tcpflags
SYN flood detected
SYN flood 192.168.1.123 59761 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59764 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59769 151.101.65.69 80 6 SYN
予想される出力は次のとおりです。
name action srcip srcport dstip dstport protocol tcpflags
SYN flood detected SYN flood 192.168.1.123 59761 151.101.65.69 80 6 SYN
SYN flood detected SYN flood 192.168.1.123 59764 151.101.65.69 80 6 SYN
SYN flood detected SYN flood 192.168.1.123 59769 151.101.65.69 80 6 SYN
追加し-x
てもcolumn
違いはなく、列数を指定しません-c
(ターミナルの画面幅が十分です)。元のデータに改行文字がないのに、なぜこれを行うのですか?
awk
BEGINブロックで生成されたヘッダー列でも発生するため、実際に私のデータの文字だとは思いません。
答え1
最初のカンマ区切り値が非常に長い文字列であるCSVファイルに行を挿入すると、問題を再現できます。
name
action srcip srcport dstip dstport protocol tcpflags
SYN flood detected
SYN flood 192.168.1.123 59761 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59764 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59769 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59771 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59772 151.101.65.69 80 6 SYN
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx SYN flood 192.168.1.123 59890 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 60002 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 60005 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 60006 151.101.65.69 80 6 SYN
name
実際の出力では、と列の間に改行はありませんが、改行action
(行が長すぎる)は改行の後ろにインデントがあるようです。
これは、データ内のname
非常に長い値を持つ項目を見つける必要があることを意味します。