이 문제를 해결하기 위해 스크립트를 작성하려고 합니다.
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
(동일한 작업을 두 번 수행했기 때문에 x
) 단순화할 수 있지만 s/
지금은 어떻게 될지 상상할 수 없습니다.