Perl
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修改了,這對我來說很不方便。有什麼方法可以跳過這個 oneliner 中 CSV 文件的第一行或第一行?
Perl 有一個特殊的變數
$.
來記錄目前的行號。$. > 1
因此,您可以為替換添加一個簡單的條件:perl -i -pe 's/(\d*\.\d*)/int($1+0.5)/ge if $. > 1' file
其他工具具有明確的標頭處理 ex。來自
numfmt
GNU Coreutils:numfmt -d, --header --format='%.0f' --field=- --invalid=ignore <file
(預設情況下,四捨五入是 IEEE 從零開始)。
假設您要在輸出中保留標頭:
$ 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 單行符相同的方式重新格式化數據中的數字,但不觸及第一行。對於輸入的每一行,除第一行外,將數字四捨五入,並用修改後的數據重寫該行。程式碼中的尾隨
1
導致輸出所有行,無論是否修改。