ソースは次のとおりです。
test/snmp/result/08-28-2016_12-30/AAAAA/hostname01_192.168.1.1
161/udp open snmp
| snmp-brute:
| comstring1 - Valid credentials
|_ comstring2 - Valid credentials
test/snmp/result/08-28-2016_12-30/AAAAA/hostname02_192.168.1.2
161/udp open snmp
| snmp-brute:
| comstring1 - Valid credentials
|_ comstring1 - Valid credentials
上記のテキストをどのように解析して次のように作成できますか?
08-28-2016_12-30|AAAAA|hostname01|192.168.1.1|comstring1-Valid credentials -- comstring1 - Valid credentials
08-28-2016_12-30|AAAAA|hostname02|192.168.1.2|comstring1-Valid credentials -- comstring1 - Valid credentials
主な問題は、コードが "|"または、「|_」文字に基づいてグループ化できないことです。コードをたくさん変更しましたが、成功しませんでした。たとえば、次のようになります。
awk '{ORS=($0 !~ "_"?FS:RS)}1'
ベストアンサー1
スクリプトは、レコード区切り文字またはフィールド区切り文字を使用して特別な操作を実行する必要はありません。例の入力と出力が与えられたら、スクリプトは4つの行タイプのうち2つだけを見つけることができます。
test/snmp/result/08-28-2016_12-30/AAAAA/hostname01_192.168.1.1
(これは最大文字で区切られた/
)と
| comstring1 - Valid credentials
一致は正規表現で行うことができます。
スクリプトは最初の行スタイルと一致する必要があります。たとえば、次のようになります。
/^.*\/.*\/.*\// {
split($0, "/", fields);
# ...more work needed :-)
以下を使用して、文字に基づいて配列にsplit
切り捨て/
ます。sub
substr
index
"hostname01_192.168.1.1"
)。
printf
完了すると、2番目の行タイプからメッセージを抽出し、完了する変数を提供します。これを行うには、30行のスクリプトが必要な場合があります。