![한정자가 있는 문서에서 일치하는 필드 데이터를 인쇄하는 방법은 무엇입니까?](https://linux55.com/image/161739/%ED%95%9C%EC%A0%95%EC%9E%90%EA%B0%80%20%EC%9E%88%EB%8A%94%20%EB%AC%B8%EC%84%9C%EC%97%90%EC%84%9C%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%ED%95%84%EB%93%9C%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
세 개의 열이 있는 CSV 문서가 있습니다. 열 1에는 MD5 체크섬이 있습니다. 열 2에는 파일 경로가 포함됩니다. 열 3은 비어 있거나 고유 식별자가 있습니다.
예
0000801f8b7a5c3b483809ef069d4d82,/Volumes/Somepath2/Somefile1,Uniquecode
0000801f8b7a5c3b483809ef069d4d82,/Volumes/Somepath2/Somefile2,Uniquecode
0044f99638140c2eec15aa78eeb41d5e,/Volumes/Somepath3/Somefile2,
0044f99638140c2eec15aa78eeb41d5e,/Volumes/Somepath4/Somefile3,Uniquecode
005040886c659d73c8596b40a70ff231,/Volumes/Somepath5/Somefile4,
005040886c659d73c8596b40a70ff231,/Volumes/Somepath6/Somefile4,
내가 원하는 것은 일치하는 체크섬이 있고 파일에 고유 코드 필드가 채워진 줄만 인쇄하는 것입니다. 그러나 파일이 고유 코드가 있는 다른 파일과 일치하는 경우에는 인쇄하지 않습니다. 따라서 위의 예에서는 다음과 같은 결과가 출력됩니다.
0044f99638140c2eec15aa78eeb41d5e,/Volumes/Somepath4/Somefile3,Uniquecode
처음 두 파일은 체크섬과 일치하지만 둘 다 고유 코드를 공유하므로 인쇄하고 싶지 않습니다. 마지막 두 개는 체크섬과 일치하지만 3 필드는 모두 채워지지 않았지만 가운데 두 개는 일치하며 하나만 고유 코드가 채워져 있습니다. 목록에 파일이 체크섬과 일치하는 인스턴스가 2개 이상 있습니다.
awk를 사용하여 이 작업을 수행하려고 하는데, 이에 대해 잘 알지 못하고 이러한 규칙을 모두 입력하는 방법을 모릅니다.
어떤 도움이라도 대단히 감사하겠습니다.
답변1
$ awk -F, 'NR==FNR{a[$1,$3]; next} ($3 != "") && (($1,"") in a)' file file
0044f99638140c2eec15aa78eeb41d5e,/Volumes/Somepath4/Somefile3,Uniquecode
위는 두 개의 파일 패스를 수행합니다. 첫 번째는 입력의 첫 번째와 세 번째 필드를 연결하여 인덱싱된 배열을 생성하고, 두 번째는 채워지는 세 번째 필드를 테스트하고 첫 번째 필드의 연결로 구성됩니다. 필드와 배열을 저장하고 현재 줄이 있으면 인쇄합니다.