내 파일에 데이터 세트가 있습니다.
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