2014-09-03 4 views
0

텍스트 파일에서 첫 번째 열은 복제되지만 두 번째 열은 다른 행만 어떻게 인쇄합니까? 나는이 차이를 화해시키고 싶다. 어쩌면 awk/sed/bash를 사용하고 있을까요?첫 번째 열과 두 번째 열이 일치하는 행 인쇄

입력 :

Jon AAA 
Jon BBB 
Ellen CCC 
Ellen CCC 

출력 : 실제 파일이 정렬되지 않습니다 것을

Jon AAA 
Jon BBB 

.

도움 주셔서 감사합니다.

+0

예제가 항상 예제와 같이 그룹화되어 있습니까? –

+0

아니요, 혼합 및 임의 숫자 – user1899415

+0

열 1에 동일한 값을 가진 두 줄 이상이 있습니까? 그렇다면 어떻게되어야합니까? –

답변

1

이 라인은해야한다 : 그것은 처음

  • 확인 된 경우, 1 라인이 배열로 $ 2 $ 1 저장

    awk '!($1 in a) {a[$1]=$2;next} 
        $1 in a && $2!=a[$1]{p[$1 FS $2];p[$1 FS a[$1]]} 
        END{for(x in p)print x}' file 
    
    • (내가 더 잘 읽기위한 3 줄에 한 줄을 끊었다) line2 : 기존의 $ 1과 다른 $ 2의 경우 (두 행) 배열 p에 넣으므로 같은 $ 1, $ 2 조합은 여러 번 인쇄되지 않습니다.
    • 만의 고유 라인을 인쇄 할 수
  • +0

    이렇게하면 출력의 순서가 재정렬됩니다. 그게 문제인지 아닌지 확실하지 않습니다. –

    +0

    아니요, 이것은 @TomFenech 발생 순서를 유지하지 않습니다. 우리는 그것을 만들 수 있지만 더 많은 검사가 필요하다. 또한 주문 정보를 저장하기 위해 또 다른 배열이 필요하다. – Kent

    +0

    @Kent 좋은 해결책이지만, OP가 원하는 것이 명확하지 않습니다. 예를 들어, 끝에'Jon AAA'라고 말한 행을 삽입하면 행이 중복 되어도 여전히 그 행을 인쇄합니다. –

    1
    sort file | uniq -u 
    

    배열 p의 인덱스를 인쇄 할 수 있습니다.

    +0

    'sort'를 제거하고 정렬 할 필요가 없다면'uniq -u file'을 사용하면됩니다. –

    +0

    이것이 OP가 필요한지 의심 스럽습니다. 그의 예에서 다른 줄이 있다면 : 'FOO BAR', 당신의 유니크가 그것을 출력으로 가져올 것입니다. 하지만 내 이해에서, 그는 그 라인을 원하지 않을 수도 있습니다. – Kent

    +0

    @ DavidC.Rankin, 이전 의견에서 OP는 라인이 "혼합되어 무작위", 즉 정렬 일 것이라고 말했다. –

    0

    그냥 보통의 독특한 종류이 당신을 위해 작동 할 수

    awk '!a[$0]++' test 
    
    1

    작동합니다 :

    sort file | uniq -u | rev | uniq -Df1 | rev 
    

    이것은, 중복 라인을 제거하고, 파일을 정렬 선을 반전 제거하고 독특한 라인이 동일한 키 (두 번째 필드가 동일한 위치에서 복제본을 유지하지 않음)를 가지지 않고 라인을 원래 위치로 되돌립니다.

    이렇게하면 싱글 톤 키로 중복 된 선과 선이 삭제됩니다.

    관련 문제