데이터가 포함된 파일이 있는데 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
원하는 결과(예: 어휘 대 숫자)를 얻기 위해 옵션을 조정해야 할 수도 있습니다.