패턴과 일치하는 인접한 행 삭제

패턴과 일치하는 인접한 행 삭제

입력: 정렬된 줄이 있는 파일

출력: 모든 숫자를 제거하면 파일에 인접한 줄과 일치하는 "고유한" 줄이 포함됩니다.

입력하다

abbylove2007
abbylove2008
abbylove2012
AbbyLove2014
abby1994lover
abby2007lover
abbylovesaal2018
abbylovesbsb2003

산출

abbylove2007
abby1994lover

abbylove\d+ 및 abby\d+lover와 일치하는 인접한 행이 여러 개 있기 때문에 abbylove2007 및 abby1994lover가 남습니다.

답변1

$ awk '{ curr=$0; gsub("[0-9]","",curr) } curr != prev { prev=curr; prevfull=$0; flag=0; next } !flag { print prevfull; flag=1 }' test
abbylove2007
abby1994lover

먼저 현재 행에서 숫자를 제거합니다. 숫자를 제거한 후 이 결과가 이전 행과 다른 경우 이전 행을 이 행으로 업데이트하고 이전 행 전체를 기억하고 변수를 flag0으로 설정한 후 다음 행을 계속합니다.

flag이 변수는 이전 라인과 동일한 라인을 출력할 때 사용됩니다.첫 번째이 라인들.

이전 줄과 동일한 줄(번호 제거)의 경우 플래그가 설정되지 않은 경우 전체 이전 줄을 인쇄한 다음 플래그를 설정합니다.

답변2

이는 다음과 같은 수정된 sed입니다 uniq -d.

sed '$!N; s/^\([^0-9]*\)\(.*\)\n\1[0-9].*$/\1\2/; t; D'

관련 정보