2017-09-15 200 views
2

我有一行百分比的文本文件。我需要轉了所有的數字在文本文件中的5最接近的整數,例如...最近倍數爲5的舍入數值

4輪高達58輪高達1012回合下來到1017回合下來到15,等...

文本文件:

25% 80% 22% 67% 45% 30% 

預計圓角輸出:

25% 80% 20% 70% 45% 30% 

試圖規範一個整數:

m=23 | ((m /= 5, m *= 5)) && echo $m 
+0

您的預期輸出是什麼? – anubhava

+0

請參閱最新編輯 – arnpry

+0

請注意,'67'不應該變成'70',因爲最近的數字是'65'。這實際上使我難住,我在回答時犯了錯誤。感謝@Barmar來捕捉它。 – anubhava

回答

2

您可以使用此AWK:

s='25% 80% 22% 67% 45% 30%' 
awk '{for (i=1; i<=NF; i++) $i = int(($i+2)/5) * 5 "%"} 1' <<< "$s" 

25% 80% 20% 65% 45% 30% 
+1

這將舍入,而不是5的最接近倍數。'23%'將變成'20%',而不是'25%'。 – Barmar

+0

對不起,但'67'不能變成'70',因爲最近的是65而不是70 – anubhava

+1

加2,而不是5.如果你想要最接近的10的倍數,你可以使用5. – Barmar

1

m/5始終幾輪下來。您需要在分割之前將2添加到數字中,以便它將得到最接近的數字而不是總是舍入。

m=23 ; ((m = (m+2)/5, m *= 5)); echo $m 
+0

這太棒了!我如何將這個四捨五入(向上或向下)應用於我的文本文件中的每個值? – arnpry

+0

'for $ in $(cat filename)' – Barmar

+0

問題是關於如何做四捨五入。從文件中讀取數字是一個單獨的問題,與舍入無關。 – Barmar

-3

做到這一點其實是在Excel中預設公式的最簡單方法。

將數量更改爲數字格式。不是百分比。

實例:

25%= 0.25

80%= 0.8

22%= 0.22

67%= 0.67

45%= .45

30%= .3

假設您想要向上或向下取整的數量是A2,並且您希望取整(.8取整爲.10)或向下取整(.12向下取整至.10)整數爲「 5「,該公式將= MROUND(A2,5)。

25%= 0.25 ------- = MROUND(A2,0.05)-------這將產生0.25

80%= 0.8 ----- - = MROUND(A3,.05)-------這會產生.8

22%= .22 ------- = MROUND(A4,.05)---- ---這將產生0.2

67%= 0.67 ------- = MROUND(A5,0.05)-------這將產生0.7

45% = .45 ------- = MROUND(A6,.05)-------這會產生.45

30%= .3 ------- = MROUND(A7 ,.05)-------這會產生.3

然後,您只需要將制定的單元格格式化爲百分比。

25%= .25 -------使用以下公式= MROUND(A2,.05)-------這會產生.25 -------格式化爲百分比將產生25%

80%= .8 ------- = MROUND(A3,.05)-------這會產生.8 -------格式化爲百分比將產生80%

22%= .22 ------- = MROUND(A4,.05)-------這將產生.2 -------格式化爲百分比會產生20%

67%= .67 ------- = MROUND(A5,.05)-------這會產生.7 -------格式化爲百分比將產生70%

45%= .45 ------- = MROUND(A6,.05)-------這會產生.45 -------格式化爲百分比會產生45%

30%= .3 ------- = MROUND(A7,0.05)-------這會產生.3 ------格式化爲百分比會產生30%

希望這有助於。

+0

謝謝,但是,這個問題涉及到Linux系統。請參閱'unix'標籤。 – arnpry

+0

我的歉意。我一定忽略了這一點。 –

1

可以使用perl sub和e來評估替換中的表達式。

perl -pe 's{(\d+)(?=%)}{int(($1+2)/5)*5}ge' file 

25,85%,20%,65%,45%,30,20%,2,10%