디지털 형식 변환 및 파일 비교

디지털 형식 변환 및 파일 비교

174개의 필드가 있는 파일이 있습니다. 처음 4개 필드는 다음과 같습니다.

1|2.3|2.3|34
1|0|0|34
1|0.0|0.0|34
1|11|11|34
1|.3|.3|34
1|-0.00|-0.00|34
1|1.67|1.67|34

이것을 다음과 같이 변환해야 합니다.

1|2.30|2.30|34
1|0.00|0.00|34
1|0.00|0.00|34
1|11.00|11.00|34
1|0.30|0.30|34
1|0.00|0.00|34
1|1.67|1.67|34

다음을 사용했지만 마지막 값은 1|1.70|1.70|34.

awk 'BEGIN {OFS=FS="|"} {$2=$2+0.00;$3=$3+0.00; print $0 }' file1 > temp1
awk 'BEGIN {OFS=FS="|"} {$2=sprintf("%.2f",$2);$3=sprintf("%.2f",$3);print $0}' temp1 > temp2

답변1

GNU Coreutils를 사용하는 numfmt유틸리티 :

numfmt --delimiter='|' --field=2-3 --format='%.2f' < file
1|2.30|2.30|34
1|0.00|0.00|34
1|0.00|0.00|34
1|11.00|11.00|34
1|0.31|0.31|34
1|0.00|0.00|34
1|1.67|1.67|34

--field=2-3요구사항에 따라 필드 범위를 조정하세요.

답변2

두 번째 awk구성은 거의 완벽합니다. 이 시도

awk -F'|' 'BEGIN {OFS = FS} {$2 = sprintf("%0.2f", $2+0); $3 = sprintf("%0.2f", $3+0); print $0}'
1|2.30|2.30|34
1|0.00|0.00|34
1|0.00|0.00|34
1|11.00|11.00|34
1|0.30|0.30|34
1|0.00|0.00|34
1|1.67|1.67|34

관련 정보