Bash 고유 행 ID

Bash 고유 행 ID

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

출력: 입력 파일에 고유한 행 ID(첫 번째 또는 임의)가 있는 파일

입력하다

abbylove
abbylove
abbylove
abbylover
abbylover
abbylovesyou
abbylovesyou
abbylsmith
abbylsmith
abbylyn
abbylynn

산출

1
4
6
8
10
11

0 인덱스도 괜찮습니다.

그러한 출력을 생성하는 방법은 무엇입니까? 쉘 uniq과 명령 sort에서 그러한 옵션을 찾지 못했습니다 .

고쳐 쓰다.

연도만 다른 포함된 파일에서 고유하고 인접한 줄을 찾으려고 합니다. 예를 들어 파일을 필터링하고 싶습니다.

abbylove2016
abbylove2017
abbylove2018
abb1999ylover
abb2005ylover
abbyloves2001you
abbyloves2006you
abbylsm1980ith
abbylsm2010ith
abbylyn2002
abbylynn1999

그리고 단지 얻을

abbylove2016
abb1999ylover
abbyloves2001you
abbylsm1980ith
abbylyn2002
abbylynn1999

연도를 지우면 도움이 될 것 같아요...

답변1

적어도 GNU의 경우uniq

$ nl input | uniq --skip-fields=1 | cut -f1
     1
     4
     6
     8
    10
    11

답변2

이전 행이 무엇인지 추적하고 현재 행이 이전 행과 같지 않으면 필요한 정보를 출력합니다.

$ awk '$0 != prev { print NR, $0; prev = $0 }' file
1 abbylove
4 abbylover
6 abbylovesyou
8 abbylsmith
10 abbylyn
11 abbylynn

또는

$ awk '$0 != prev { print NR; prev = $0 }' file
1
4
6
8
10
11

업데이트된 질문:

$ awk '{ curr=$0; gsub("[0-9]","",curr) } curr != prev { print; prev = curr }' file
abbylove2016
abb1999ylover
abbyloves2001you
abbylsm1980ith
abbylyn2002
abbylynn1999

먼저 현재 행의 모든 ​​숫자를 제거한 다음 결과를 이전 행과 비교하는 방식으로 작동합니다(숫자를 제거한 후). 일치하는 항목이 없으면 원래 현재 행을 인쇄합니다.

관련 정보