음수 및 양수 소수 반올림

음수 및 양수 소수 반올림

awk 명령을 사용하여 다음 숫자를 가장 가까운 정수로 반올림하고 이를 다른 열(예: col11 및 col12)에 복사하고 싶습니다. 누가 도와줄 수 있나요

예를 들어 1)

column5,column6,,,,,column11,column12,
     -21733.3, -4129.327,,,,,,,

예상 출력

 column5,column6,,,,,column11,column12,
-21733.3, -4129.327,,,,,-21733,-4129,
column5,column6,,,,,column11,column12,
      21733.3,4129.327,,,,,,,

예상 출력

 column5,column6,,,,,column11,column12,
21733.3,4129.327,,,,,21733,4129,

답변1

줄 바꿈이나 따옴표 안에 문자열 필드가 없는 간단한 CSV인 경우 다음 ,을 사용하여 수행할 수 있습니다 awk.

awk -F, -v OFS=, '
  NR > 1 {
    $11 = sprintf("%.0f", $5)
    $12 = sprintf("%.0f", $6)
  }
  {print}' < your-file

( NR > 1머리글 행이 아닌 두 번째부터 시작하는 레코드에만 적용됩니다)

sprintf("%.0f")int()소수 부분을 잘라내어 가장 가까운 값으로 반올림합니다 .

을 사용하고 mlr, 열 이름을 사용하고 더 복잡한 CSV를 처리합니다(단, CSV 형식에는 다양한 변형이 있다는 점에 유의하세요).

mlr --csv put '$column11 = round(float(strip($column5)));
               $column12 = round(float(strip($column6)))' < your-file

주위에 공백이 있는 숫자는 다음과 같이 처리됩니다.by mlr이므로 stripping은 또 다른 결과를 생성합니다.이러한 공백이 없으면 다음으로 변환될 수 있습니다.뜨다, 그 다음에뜨다에 전달되었습니다 round().

숫자 주위에 공백이 없으면 다음으로 충분합니다.

mlr --csv put '$column11 = round($column5);
               $column12 = round($column6)' < your-file

관련 정보