2014-06-09 101 views
-1

我在文件中的以下值:刪除尾隨零在一個文件中,除了人物

1.5000 
0.006 
9.0001 
104.2500 
17.0000 
3.5000 
paper 

我想刪除尾隨零,以下awk將刪除尾隨零,但對字符值打印零:的上述awk

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

輸出:

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 
+0

可能重複[刪除尾隨零使用awk](http://stackoverflow.com/questions/24109095/remove-trailing-zero-using-awk) – Jotne

回答

1

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 
+0

謝謝,如何在製表符分隔文件中使用上述sed,如果輸入incase值是第二列。 – Marjer

+0

@Marjer,更新了答案 – perreal

+0

我在awk -F下面使用了$ 2〜/^[0-9] + [。] [0-9] [1-9] * 0 + $/{$ 2 = gensub (/([0-9]*[1-9]+)?)0*$/,「\\ 1」,「g」,$ 2)} 1'sa.txt'它會打印列 – Marjer

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

希望它有幫助。

0

這裏是如何做到這一點:

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無需啓動兩個相等的職位:
remove trailing zero using awk

^ *開始0或多個空格(你有一些行空格)
[0-9]+一個或多個號碼:554534654635
\.一德桑莫爾點(.需要轉義)

0+$沒事
\.$如果再符合.結束替換一個或多個0在行$的末尾添加0得到17.0而不是17.

+0

謝謝@ jotne,請你解釋一下這個awk。我有點困惑+ \ – Marjer

+0

@Marjer更新了我的文章,以幫助理解它是如何工作的。 – Jotne