이 질문은 이 질문의 파생물입니다.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
다른 도구에는 명시적인 헤더 처리 기능이 있습니다. numfmt
GNU 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
모든 행이 출력되거나 수정되거나 되지 않습니다.