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
이므로 strip
ping은 또 다른 결과를 생성합니다.끈이러한 공백이 없으면 다음으로 변환될 수 있습니다.뜨다, 그 다음에뜨다에 전달되었습니다 round()
.
숫자 주위에 공백이 없으면 다음으로 충분합니다.
mlr --csv put '$column11 = round($column5);
$column12 = round($column6)' < your-file