여러 동적 열을 기반으로 중복을 제거하는 방법

여러 동적 열을 기반으로 중복을 제거하는 방법

bash(awk)를 사용하여 여러 열을 기반으로 파이프로 구분된 파일에서 중복 항목을 제거할 수 있지만 열을 입력 매개 변수로 전달해야 하는 방법은 무엇입니까? 내 파일에 다음 데이터가 있습니다

Insert|val1|val2|val3|val4 
Insert|val1a|val2|val3a|val4

입력 매개변수를 기반으로 중복을 제거하고 싶습니다. 때로는 위치 1과 위치 3을 사용하여 행을 삭제하고 때로는 위치 2와 위치 3을 사용하여 행을 삭제하고 싶습니다. 나는 이것을 사용하고 있습니다

 awk -F, '!seen[$1,$3 ]++ '

하지만 $1,$2를 매개변수화하는 방법을 모릅니다.

답변1

이것은 아마도 당신이 원하는 것입니다:

$ awk -v c='1 3' -F'|' 'BEGIN{split(c,k," ")} {key=""; for (i in k) key=key FS $(k[i])} !seen[key]++' file
Insert|val1|val2|val3|val4

관련 정보