txtファイルをCSVとして処理するスクリプト

txtファイルをCSVとして処理するスクリプト

この問題を解決するためにスクリプトを作成しようとしています。

Mikrotik01#show unique routing entry | 192.168.255.232 | inc ID
Thu June 10 15:21:32.808 CST
 Unique Entry: 192.168.255.21
 Unique Entry: 192.168.255.233
 Unique Entry: 192.168.255.155
Mikrotik01#show unique routing entry | 192.168.255.233 | inc ID
Thu June 10 15:21:33.079 CST
 Unique Entry: 192.168.255.234
 Unique Entry: 192.168.255.232
Mikrotik01#show unique routing entry | 192.168.255.234 | inc ID
Thu June 10 15:21:33.347 CST
 Unique Entry: 192.168.255.233
 Unique Entry: 192.168.255.235

以下を含むCSVに変換:

192.168.255.232,192.168.255.21,192.168.255.233,192.168.255.155
192.168.255.233,192.168.255.234,192.168.255.232
192.168.255.234,192.168.255.233,192.168.255.235

デフォルトでは、最初の行から新しい行を開始し、「Mikrotik」ホスト名を含む次の行に達するまで、同じ行にコンマを使用して隣接する各ルーターIDを追加します。ここで新しい行を作成し、完全な実行を続けます。ファイル。最終結果はcsvです。

答え1

awk -F'[[:blank:]|]+' '
    /^Mikrotik01/ {if (NR>1) print ""; printf "%s", $(NF-2)} 
    /Unique Entry/ {printf ",%s", $NF}
    END {print ""}
' file.txt > File.csv

答え2

最初の終了時にsed-scriptになることがあります。

sed -E '
/Mikrotik01/{s/.* ([0-9.]{7,}) .*/\1/;x;/^$/!b}
/[0-9.]{7,}/!d
s/.* ([0-9.]{7,}).*/\1/
x
G
s/\n/,/
h
$!d' file.txt > file.csv

または(少し短いかもしれませんが強力ではありません。not |byで改行ブロックを認識しますMikrotik01

sed -E '
  /^T/d
  s/^[^.]*[|:] //
  / \|.*$/{s///;x;/^$/!b}
  x
  G
  s/\n/,/
  $!{h;d}' file.txt > file.csv

(同じ作業を2回行ったのでx)単純化できますが、s/今はどうなるか想像できません。

関連情報