2014-09-23 107 views
0

我有一個pipedelimited文件,有幾個小數字段,我需要在任何字段中的小數點後忽略零,並將輸出重定向到一個不同的文件,像列A列小數所見下面從unix中的管道分隔文件中刪除尾隨零

column A 
24.4400 
.8930 
1.6730 
.2200 
1.6870 

預期輸出

24.44 
0.893 
1.673 
0.22 
1.687 

下面假設是管道分隔的文件

080|580||185.50|12|0|24.4400|2014-06-09|20140531 
080|580||185.20|12|0|700.00|2014-06-09|20140531 
080|580||185.30|12|0|30.500|2014-06-09|20140531 

預期輸出應該

080|580||185.5|12|0|24.44|2014-06-09|20140531 
080|580||185.2|12|0|700|2014-06-09|20140531 
080|580||185.3|12|0|30.5|2014-06-09|20140531 

任何人都可以請找到一個解決方案helpme,則應檢查任何小數領域和移除這些領域和輸出尾隨零應該被重定向到一個不同的文件

如果以上是不可能的 那麼我ATLEAST尋找一個解決方案在下面

,因爲我知道這個位置o f十進制字段,有沒有什麼辦法可以在unix命令中指定這些特定字段,並從這些字段中刪除尾隨零並將輸出重定向到一個新文件,我將不勝感激任何人都可以找到這種解決方案

+0

我想不出爲什麼你需要這樣做。你能解釋一下,還是這是一個學習練習?祝你好運。 – shellter 2014-09-23 22:16:23

+0

你可以使用python嗎?更直接。 – beroe 2014-09-23 23:34:46

回答

2

您可以使用AWK此任務:

$ awk -F\| '{$4=sprintf("%g",$4);$7=sprintf("%g",$7)}1' OFS="|" file 

sprintf("%g",$7):打印最短表示或浮動。

+0

你可以直接說'{$ 4 = $ 4 + 0; $ J = $ 7 + 0} 1'。它會自動轉換爲數字,以便尾隨零將離開。 – fedorqui 2014-09-24 08:27:42

+0

我只是注意到,刪除拖尾零在這裏是沒用的,只需要掩碼就可以了,我也喜歡你的解決方案@fedorqui – klashxx 2014-09-24 08:33:08

1

這個awk怎麼樣?

$ awk 'BEGIN{FS=OFS="|"} {$4=$4+0; $7=$7+0}1' file 
080|580||185.5|12|0|24.44|2014-06-09|20140531 
080|580||185.2|12|0|700|2014-06-09|20140531 
080|580||185.3|12|0|30.5|2014-06-09|20140531 

這是第4和第7場轉換成數字,使得後端0消失的慣用方式。

注意關鍵是要在現場進行算術運算。因爲我們希望價值保持原樣,所以可以使用+0,/0(如果沒有0)或*1

+0

+1,但我會用'$ 4 + = 0; $ 7 + = 0';) – klashxx 2014-09-24 08:42:06

+0

更喜歡'$ 4 = $ 4 + 0'來保持它更清晰。但我喜歡你的想法,謝謝@ klashxx! – fedorqui 2014-09-24 09:48:13