CSV UNIX를 사용하여 여러 열의 값을 2자리로 자르는 방법

CSV UNIX를 사용하여 여러 열의 값을 2자리로 자르는 방법

샘플 파일 구조는 다음과 같습니다

Product,Base_Price,Promotion_Price,Discount
Shampoo,1.999999,1.409999,15.9988999
Biscuit,2.999999,2.409999,15.9988999

출력 파일은 다음 형식일 것으로 예상됩니다.

Product,Base_Price,Promotion_Price,Discount
Shampoo,1.99,1.40,15.99
Biscuit,2.99,2.40,15.99

답변1

numfmtGNU Coreutils를 사용하는 시스템에서는 다음과 같은 사용을 고려할 수 있습니다 .

$ numfmt --delimiter=, --header --field=2- --format='%.2f' --round=down < file.csv 
Product,Base_Price,Promotion_Price,Discount
Shampoo,1.99,1.40,15.99
Biscuit,2.99,2.40,15.99

전통적인 IEEE 반올림을 0부터 원하면 이 --round=down지시어를 생략하세요.

답변2

이는 귀하의 요구 사항과 일치합니다.

$ sed -E 's/([0-9]+\.[0-9]{2})[0-9]*/\1/g' file.csv 
Product,Base_Price,Promotion_Price,Discount
Shampoo,1.99,1.40,15.99
Biscuit,2.99,2.40,15.99

또는 추가 숫자를 제거하는 대신 숫자를 반올림하려면 다음을 시도해 볼 수 있습니다.

$ perl -pe 's/(\d+\.\d+)/sprintf("%0.2f",$1)/ge' file.csv 
Product,Base_Price,Promotion_Price,Discount
Shampoo,2.00,1.41,16.00
Biscuit,3.00,2.41,16.00

답변3

 awk -F "," 'NR>1{print $1,$2,$3,$4}' y.txt |awk '{print $1,substr($2,1,4),substr($3,1,4),substr($4,1,5)}'|awk 'OFS="," {print $1,$2,$3,$4}1' filename

Product,Base_Price,Promotion_Price,Discount
Shampoo,1.99,1.40,15.99
Biscuit,2.99,2.40,15.99

답변4

Miller( mlr)를 사용하여 숫자 값을 소수점 이하 두 자리까지 자릅니다.

$ mlr --csv put 'for (k,v in $*) { is_numeric(v) { $[k] = fmtnum(floor(v*100)/100,"%.2f") } }' file
Product,Base_Price,Promotion_Price,Discount
Shampoo,1.99,1.40,15.99
Biscuit,2.99,2.40,15.99

관련 정보