awk
스크립팅으로이 작업을 수행 할 수 있습니다.
이
awk 'BEGIN {col=3; sep=" "; forbidden=sep} {if (match(forbidden, sep $col sep) == 0) {forbidden=forbidden $col sep; print $0}}' input.file
BEGIN
키워드는 3 열 값을 모니터링하는 데 사용되는 forbidden
문자열을 선언 : 다음 코드 조각은 내가 당신의 문제를 해결하기 위해 함께했다입니다. 그런 다음 match
키워드는 현재 행의 세 번째 열에 forbidden
값이 포함되어 있는지 확인합니다. 그렇지 않으면 열의 내용을 forbidden
목록에 추가하고 전체 행을 인쇄합니다.
여기에서 sep=" "
은 분리 기호를 인스턴스화합니다. 우리는 서로 다른 값을 넣음으로써 생성 된 단어를 피하기 위해 각 forbidden
값 사이에 sep
을 사용합니다. 예를 들어이 경우
1 1111 ta
2 2222 to
3 3333 t
4 4444 tato
세퍼레이터없이 t
및 tato
는 forbidden
값으로 간주된다. 기본적으로 각 열을 구분하는 데 사용되므로 ""을 구분 기호로 사용하므로 열에는 이름에 공백이 포함될 수 없습니다.
복제본을 제거해야하는 열의 번호를 변경하려면 col=3
을 필요한 열의 수 (전체 줄 0, 첫 번째 열의 경우 1, 두 번째, ...)
입력을 주셔서 감사하지만 위의 파일에 대해서는 중복을 제거하지 않습니다. 나는 나의 파일을 위해 아래 출력을 얻는다. 1 1223 abc, 2 4234 weroi, 0 3234 omsder, 1 1111 abc '. '1 1111 abc'도 제거해야합니다. – KillBill
@KillBill 나는 당신이 나의 코드를 복사하는 실수를했다고 믿는다 : 당신은'BEGIN {forbidden = ""}'을 써야한다 :'forbidden'는 구분 기호 (이 경우에는 빈 공간)로 초기화되어야하며, 그렇지 않으면 첫 번째 줄은 결코 일치하지 않을 것입니다 (금지 된 문자열에서 ** ""$ 3 ""** 패턴을 찾습니다) – Aserre