일치하는 라인과 다른 패턴과 일치하는 가장 최근의 이전 라인을 표시합니다.

일치하는 라인과 다른 패턴과 일치하는 가장 최근의 이전 라인을 표시합니다.

show mac address table스위치에 1000개의 항목이 나열되어야 한다는 요구 사항이 있습니다 .

파일 1:

switch_1#mac 주소 테이블 표시
AA:AA:AA:AA:AA:AA 포트 47
BB:BB:BB:BB:BB:BB 포트 48
.
.
.
DD:DD:DD:DD:DD:DD 포트 50
파일 2:

switch_2#mac 주소 테이블 표시
AA:AA:AA:AA:AA:AA 포트 47
BB:BB:BB:BB:BB:BB 포트 48
.
.
.
DD:DD:DD:DD:DD:DD 포트 45

포함된 행을 표시하는 방법을 찾아야 합니다 DD:DD:DD:DD:DD:DD. 그런 일이 발생하면 위의 행을 검색하고 호스트 이름이 포함된 행을 인쇄해야 합니다.

따라서 출력은 다음과 같아야 합니다.

switch_1#mac 주소 테이블 표시
DD:DD:DD:DD:DD:DD 포트 50
switch_2#mac 주소 테이블 표시
DD:DD:DD:DD:DD:DD 포트 45

file1, file2동일한 디렉토리에 저장됨(이것은 단지 예일 뿐이며 약 100개 이상의 파일/스위치가 있으며 MAC는 스위치 이름과 함께 필터링되어야 함)

답변1

이상한 솔루션

해시가 포함된 행을 얻으면 이를 변수 a에 저장합니다.

일치하는 MAC 주소가 있는 행을 얻으면 변수 a가 현재 행과 함께 인쇄됩니다.

$ awk '/#/{a=$0}/^DD:DD:DD:DD:DD:DD/{print a"\n"$0}' file1 file2
switch_1#show mac address table
DD:DD:DD:DD:DD:DD port 50
switch_2#show mac address table
DD:DD:DD:DD:DD:DD port 45
$

sed 솔루션

해시가 포함된 행을 얻으면 이를 예약된 공간( h)에 넣습니다.

일치하는 MAC 주소가 있는 행을 얻으면 패턴 공간에 추가( H), 저장 공간을 패턴 공간에 복사( g), 패턴 공간 인쇄( p)

$ sed -n '/#/h;/^DD:DD:DD:DD:DD:DD/{H;g;p}' file1 file2
switch_1#show mac address table
DD:DD:DD:DD:DD:DD port 50
switch_2#show mac address table
DD:DD:DD:DD:DD:DD port 45
$

관련 정보