다양한 수의 필드가 있는 파일을 처리하는 AWK 원라이너

다양한 수의 필드가 있는 파일을 처리하는 AWK 원라이너

제가 하고 싶었던 것은 실제로 줄로 바꿀 수 있다는 것을 알고 있는 작은 스크립트를 만드는 것이었습니다. 다양한 필드 수를 포함하는 대용량 파일이 있습니다. 내가 하고 싶은 것은 각 레코드의 마지막 필드를 합산하고(소수점이 있는 숫자인 경우)... 자리 표시자 "%f\n"과 함께 printf를 사용하여 결과를 인쇄하는 것입니다...

답변1

소수점 쉼표(점)가 포함된 마지막 필드의 합계를 계산합니다.

awk '$NF ~ /\./ { sum += $NF } END { printf("%f\n", sum ) }' file.in

즉, 마지막 필드( ) $NF의 데이터에 점이 있으면 숫자라고 가정하고 에 추가합니다 sum. 마지막으로, 질문에 지정된 형식으로 합계를 인쇄합니다.

마지막 필드의 정수는 건너뜁니다.

다음은 awk실제 필드에 관계없이 마지막 필드를 숫자로 사용하려는 시도를 허용합니다. 즉, 11로 해석되고 1.21.2로 해석됩니다. 문자열 합계 는 0이 되며 hello123 으로 처리됩니다.boo123abc

awk '{ sum += $NF } END { printf("%f\n", sum) }'

다음은 숫자, 마침표, 더하기 기호 및 빼기 기호 이외의 항목이 포함된 필드를 합산하지 않습니다.

awk '$NF ~ /^[-+0-9.]*$/ { sum += $NF } END { printf("%f\n", sum) }'

여전히 허용되지만 09+99...(예: 9) 부동 소수점을 일치시키는 것은 중요하지 않으며 일치해야 하는 형식에 따라 다릅니다. 예를 들어 참조하십시오.RegExLib 사이트의 이러한 예더 유용한 패턴을 위해.

관련 정보