중복 확인 시 1[N] 문자 사용

중복 확인 시 1[N] 문자 사용

내 파일에 데이터 세트가 있습니다.

AAAPOL.0001  
AAAPOL.0002  
AAAPRO.0001  
AAAPRO.0002  
AAAPRO.0003  
AAAPRO.0004  
AAAXEL.0002  
AAAJOK.1111  
AAAJOK.2222

처음 6자를 사용하여 패턴의 첫 번째 발생만 필요하므로 처음 6자에만 일치하는 중복/고유성을 확인하는 방법을 알아야 합니다.

명령은 위의 데이터에서 반환되어야 합니다.

AAAPOL.0001   
AAAPRO.0001   
AAAXEL.0002   
AAAJOK.1111 

이 옵션에 액세스할 수 없습니다 uniq -w.

답변1

행 순서를 변경해도 괜찮다면 sort -u정렬 키를 처음 6자로 설정할 수 있습니다.

sort -u -k 1,1.6

또는 이전 부분으로 .:

sort -t . -u -k 1,1

답변2

awk를 사용하세요

귀하의 예에서는 처음 6개 문자 뒤에 마침표가 옵니다. 이것이 항상 사실이라면 다음과 같습니다.

$ awk -F. '!c[$1]++' File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111

이는 .필드 구분자 역할을 하고 첫 번째 필드가 나타난 횟수를 추적함으로써 수행됩니다.

그렇지 않은 경우:

$ awk '!c[substr($0, 1, 6)]++' File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111

substr($0, 1, 6)줄의 처음 6개 문자입니다. 연관 배열은 c처음 6개 문자를 본 횟수를 기록합니다. 따라서 0이 아닌 경우 c[substr($0, 1, 6)]이러한 문자를 본 것이므로 해당 줄은 인쇄되어서는 안 됩니다. awk에서 0이 아닌 것은 true를 의미합니다. 따라서 우리는 다음을 사용하여 테스트를 뒤집습니다 !. 즉 , !c[substr($0, 1, 6)]이 6개의 문자가아니요전에 본 적이 있어요. 후행은 다음 행을 읽기 전에 ++개수를 업데이트합니다 .c

유니크를 사용하세요

참고로 OP와 달리 uniq해당 옵션이 있는 버전에 액세스할 수 있는 사용자의 경우 다음을 수행하세요.-w

$ uniq -w6 File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111

관련 정보