Shell 删除文件中除字符外的尾随零

Shell 删除文件中除字符外的尾随零,shell,awk,Shell,Awk,我的文件中有以下值: 1.5000 0.006 9.0001 104.2500 17.0000 3.5000 paper 我想删除尾随零,以下awk将删除尾随零,但打印字符值的零: awk '{a=$0+0;if (a!~/\./) a=a".0";print a}' file 上述awk的输出: 1.5 0.006 9.0001 104.25 17 3.5 0.0 如何修改awk以跳过字符 例外输出: 1.5 0.006 9.0001 104.25 17.0 3.5 paper 使用s

我的文件中有以下值:

1.5000
0.006
9.0001
104.2500
17.0000
3.5000
paper
我想删除尾随零,以下
awk
将删除尾随零,但打印字符值的零:

awk '{a=$0+0;if (a!~/\./) a=a".0";print a}' file
上述
awk
的输出:

1.5
0.006
9.0001
104.25
17
3.5
0.0
如何修改
awk
以跳过字符

例外输出:

1.5
0.006
9.0001
104.25
17.0
3.5
paper

使用
sed

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

1.5
0.006
9.0001
104.25
17.0
3.5
paper
对于多列文件:

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

以下是如何做到这一点:

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无需开始两个相等的帖子:

^*
0
或更多空格开始(某些行中有空格)
[0-9]+
一个或多个数字EK:
5
545
34654635

\。
一个脱泥点(
需要转义)

0+$
将行末的一个或多个
0
替换为空

\.$
如果行以
结尾,则添加一个
0
以获得
17.0
,而不是
17.

谢谢,如果输入值是第二列,如何使用上面的sed在制表符分隔的文件中。我在下面使用了
awk-F,$2~/^[0-9]+[0-9][1-9]*0+/{$2=gensub1'sa.txt
它同时打印两列您想要一列吗?我有逗号分隔的文件,如
1.5000,1.5000
,我需要awk单独检查第二列的值。并将结果打印为
1.5000,1.5
。感谢我们。感谢@jotne的可能副本,你能解释一下这个awk吗。我对+\@Marjer更新了我的帖子,帮助我理解它是如何工作的感到有点困惑。
awk '/^ *[0-9]+\.[0-9]+/{sub(/0+$/,"");sub(/\.$/,".0")}1' file
1.5
0.006
9.0001
104.25
17.0
3.5
paper