Remove trailing zeros in a file except character

2019-09-19 16:09发布

问题:

I have the following values in my file:

1.5000
0.006
9.0001
104.2500
17.0000
3.5000
paper

I want to remove the trailing zero, the following awk will remove the trailing zeros but print zeros for character value:

awk '{a=$0+0;if (a!~/\./) a=a".0";print a}' file

Output of above awk:

1.5
0.006
9.0001
104.25
17
3.5
0.0

How to modify the awk to skip the characters?

Excepted output:

1.5
0.006
9.0001
104.25
17.0
3.5
paper

回答1:

Using sed:

sed 's/,\([0-9]*[.]0\?\)\(\(0*[1-9]\+\)*\)0*/,\1\2/' input

This gives:

1.5
0.006
9.0001
104.25
17.0
3.5
paper

For a multi-column file:

awk '$2~/^[0-9]+[.][0-9][1-9]*0+$/{
     $2=gensub(/([.]0?([0-9]*[1-9]+)?)0*$/, "\\1", "g", $2)}1' input


回答2:

 awk ' {print $2}' yourinputfile | awk ' { sub("\\.*0+$","");print} '

Hope it helps.



回答3:

Here is how to do it:

awk '/^ *[0-9]+\.[0-9]+/{sub(/0+$/,"");sub(/\.$/,".0")}1' file
1.5
0.006
9.0001
104.25
17.0
3.5
paper

PS no need to start two equal post:
remove trailing zero using awk

^ * Start with 0 or more spaces (you have spaces in some lines)
[0-9]+ one or more number eks: 5 545 34654635
\. a desimal point (. needs to be escaped)

0+$ replace one or more 0 at end of line $ with nothing
\.$ if then line ends with . add a 0 to get 17.0 and not 17.



标签: shell awk