CSV 파일의 숫자 반올림, 헤더 건너뛰기

CSV 파일의 숫자 반올림, 헤더 건너뛰기

이 질문은 이 질문의 파생물입니다.https://askubuntu.com/questions/601149/is-there-a-command-to-round-decimal-numbers-in-txt-files, 다음을 사용하여 성공적으로 해결되었습니다.

perl -i -pe 's/(\d*\.\d*)/int($1+0.5)/ge' file

문제는 내 CSV 파일의 헤더도 위의 Perl의 oneliner에 의해 수정된다는 것입니다. 이는 나에게 매우 불편합니다. 이 원라이너에서 CSV 파일의 첫 번째 행을 건너뛸 수 있는 방법이 있나요?

답변1

$.Perl에는 현재 줄 번호를 추적하는 특수 변수가 있습니다 . 따라서 $. > 1교체에 간단한 조건을 추가할 수 있습니다.

perl -i -pe 's/(\d*\.\d*)/int($1+0.5)/ge if $. > 1' file

바라보다PerlVar: 파일 핸들과 관련된 변수


다른 도구에는 명시적인 헤더 처리 기능이 있습니다. numfmtGNU Coreutils 에서 :

numfmt -d, --header --format='%.0f' --field=- --invalid=ignore <file

(기본적으로 IEEE는 0부터 반올림됩니다.)

답변2

출력에서 헤더를 보존한다고 가정합니다.

$ cat file
number
0.1
1.2
3.8
$ awk 'NR > 1 { $0 = sprintf("%d", $0 + 0.5) }; 1' file
number
0
1
4

awk이것은 Perl one-liner와 동일한 방식으로 데이터의 숫자 형식을 다시 지정하는 데 사용되지만 첫 번째 줄은 건드리지 않습니다.

첫 번째 줄을 제외하고 입력된 각 줄에 대해 숫자가 반올림되고 수정된 데이터로 해당 줄이 다시 작성됩니다. 코드를 후행하면 1모든 행이 출력되거나 수정되거나 되지 않습니다.

관련 정보