我正在尝试/尝试编写一个脚本来解决这个问题:
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
基本上,它会从第一行开始一个新行,然后在同一行上用逗号添加每个相邻路由器 ID,直到到达包含“Mikrotik”主机名的下一行,在该行中它将创建一个新行并继续执行整个文件。最终结果为 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
它可以被简化(因为我做了两次相同的x
and s/
),但现在我无法想象如何简化。