2016-08-22 4 views
2

내가 특정 문자열을 기준으로 위의 파일에 중복을 제거하는 bash는 방법/명령이 있는가배쉬 - 중복 순서를 보존 제거

1254543534523233434 
3453453454323233434 
2342342343223233535 
0909909092324243535 

처럼 보이는 파일을 가지고, 자신의 순서를 변경하지 않고 출력? (문자열로

-> $ {라인 : 11 : 8} : 기본이 있다면 내가 알아 내기 위해 노력하고

sort -u : sorts them numerically, then removes duplicates 
sort -kx,x -u : The same 
cat filein | uniq : requires them to be sorted already or it will not work 

1254543534523233434 
2342342343223233535 
0909909092324243535 

나는 것을 알고있다 리눅스 솔루션을 perl 코드로 해결할 필요없이. 미리 감사드립니다.

+0

이 같은 배열

  • ++ 세트 값은 정확한 복제 아니다. 서브 라인에만 기반한 라인을 비교하는 것 이외에 전체 라인을 인쇄하는 추가적인 제약이 있습니다. 그러나 [답변] (http://stackoverflow.com/questions/1444406/how-can-i-delete-duplicate-lines-in-a-file-in-unix)은 'awk'로 쉽게 확장 할 수 있어야합니다. ! seen [substr ($ 0, 11, 8)] ++ 'file.txt'. –

  • 답변

    3

    awk는 정렬해야합니다 AWK 지수는 1에서 시작

    awk '!uniq[substr($0, 12, 8)]++' file 
    
    1254543534523233434 
    2342342343223233535 
    0909909092324243535 
    
    • 때문에 당신은 12 위치에서 시작 substr($0, 12, 8)이 긴 텍스트 8 개 문자를 원하는하는데 사용할 필요가있다.
    • uniqsubstr 기능을 사용하여 검색된 하위 문자열이 포함 된 연관 배열입니다. 1
    +1

    이것은 완벽하게 작동했습니다. 감사합니다. – onlyf