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

(동일한 작업을 두 번 수행했기 때문에 x) 단순화할 수 있지만 s/지금은 어떻게 될지 상상할 수 없습니다.

관련 정보