첫 번째 및 두 번째 열 값이 일치하는 행 병합

첫 번째 및 두 번째 열 값이 일치하는 행 병합

데이터가 포함된 파일이 있는데 awk를 통해 구현하고 싶습니다. 어떻게 해야 하나요?

111,10.1.1.1,,20
111,10.1.1.1,21,
112,10.1.1.2,10,
112,10.1.1.2,,15

예상 출력:

111,10.1.1.1,21,20
112,10.1.1.2,10,15

답변1

노력하다:

$ awk -F',+' '{a[$1","$2]=a[$1","$2]","$3} END{for (ip in a)print ip a[ip]}' file | sort
111,10.1.1.1,20,21
112,10.1.1.2,10,15

어떻게 작동하나요?

  • -F',+'

    이는 awk에게 하나 이상의 쉼표로 구성된 임의의 시퀀스를 필드 구분 기호로 사용하도록 지시합니다.

  • a[$1","$2]=a[$1","$2]","$3

    a각 행에 대해 처음 두 필드의 키 아래에 있는 연관 배열의 항목에 세 번째 필드를 추가합니다.

  • END{for (ip in a)print ip a[ip]}

    파일 끝에 도달하면 배열의 각 키를 인쇄하고 그 뒤에 a해당 키의 값을 인쇄합니다.a

  • sort

    이 선택적 단계는 출력을 정렬합니다. 정렬이 중요한 경우 sort원하는 결과(예: 어휘 대 숫자)를 얻기 위해 옵션을 조정해야 할 수도 있습니다.

관련 정보