[英]remove trailing zero using awk
我的文件中包含以下值:
1.5000
0.006
9.0001
104.2500
17.0000
3.5000
我想刪除尾隨零,以下awk
將刪除尾隨零
awk '{ if ($0 ~ /\./){ sub("0*$","",$0); sub ("\\.$","",$0);} print}' file
awk以上的輸出,
1.5
0.006
9.0001
104.25
17
3.5
但是我想在小數點后添加一個零,即我想要的是一個浮點數,除了諸如2.0、3.0之類的值外,其余均不尾隨零
排除的輸出
1.5
0.006
9.0001
104.25
17.0
3.5
可能使用sed
:
sed 's/0\+$//;s/\.$/.0/'
如果輸入中可能出現類似1200
整數,請分別處理它們:
sed '/\./{s/0\+$//;s/\.$/.0/;b};s/$/.0/'
新版本處理更好的長號和文本
cat file
1.5000
0.006
9.0001
104.2500
17.0000
3.5000
450.0005
test
my00000
awk '/^ *[0-9]+\.[0-9]+/{sub(/0+$/,"");sub(/\.$/,".0")}1' file
1.5
0.006
9.0001
104.25
17.0
3.5
450.0005
test
my00000
這將所有前導0
替換為空。 如果得到.
最后,將其替換為.0
它還測試是否以0
或大於數字的空格開頭。
使用以下命令可獲得更准確的輸出,
檔名: sam
cat sam
45.0005
0.4440000
45.000000
66.66
44.000
.45000
45
awk '{if($0 ~ /^[0-9]*\.[0-9]+/) { sub(/0+$/,"") sub(/\.$/,".0") sub(/^\./,"0.");} else if($0 ~ /^[0-9]+$/) {sub(/$/,".0");}}1' sam
輸出:
45.0005
0.444
45.0
66.66
44.0
0.45
45.0
在這種情況下,使用sed
可能更簡單:
注意:
sed
與-E
( -r
別名)結合使用,以支持擴展的正則表達式,這使命令更具可讀性。 它應該與GNU sed
(Linux)和FreeBSD sed
(OSX)一起使用。 s/.../.../
)。 sed -E 's/^( *[0-9]+\.[0-9]([0-9]*[1-9])?)0+$/\1/' file
^
和結尾的$
確保整個輸入行都匹配 *
匹配前導空格(如果有) [0-9]+\\.
匹配小數點前的所有數字,加上小數點 [0-9]
匹配第一個小數點后一位(一位數字)-這樣可以確保以.0
結尾的數字不會被其尾隨的0
剝奪 ([0-9]*[1-9])?
匹配任何其他數字,直到遇到非零數字(如果有) 0+
然后捕獲到行尾的尾隨零 \\1
表示第一個捕獲組( (...)
),除尾隨零外的所有內容-有效刪除它們。 sed
的默認行為,即輸出所有行(無論是否修改)的行都將完全通過沒有匹配數字(不需要修改的數字)的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.