Bash

在 bash 中計算和向上取整數字

  • January 28, 2017

我正在努力解決以下問題: 如何通過獲取第一個欄位進行計算以及如何在 shell 中舍入浮點數?

我有一個看起來像(列之間的空間)的文件:

1533 C_P.doc
691 C_M.doc
905 G_S.doc
945 J_Z.doc
1549 J_M.doc
1701 L_B.doc

我想獲取數字列並將每個數字除以 65(但向上取整),然後添加一個包含這些數字的新列(最好在左側)。IE

24 1533 C_P.doc
11 691 C_M.doc
14 905 G_S.doc
15 945 J_Z.doc
24 1549 J_M.doc
27 1701 L_B.doc

我想在 bash 腳本中使用它。是否可以?如有必要,如果這樣更容易,可以刪除中間列。

$$ Ubuntu 14.04 $$

通過awk並保持中間欄:

awk '{printf("%.f ", ($1/65)+0.5)}1' infile > outfile
24 1533 C_P.doc
11 691 C_M.doc
14 905 G_S.doc
15 945 J_Z.doc
24 1549 J_M.doc
27 1701 L_B.doc

通過awk和不通過中間柱:

awk '{printf("%.f", ($1/65)+0.5); $1=""}1' infile > outfile
24 C_P.doc
11 C_M.doc
14 G_S.doc
15 J_Z.doc
24 J_M.doc
27 L_B.doc

請注意,它+0.5被用作ceil()函式的替代,它向上舍入到下一個數字。最後1啟動預設列印。

您可以使用perl

$ perl -MPOSIX=ceil -anle '$F[0] = ceil($F[0]/65);print "@F"' file
24 C_P.doc
11 C_M.doc
14 G_S.doc
15 J_Z.doc
24 J_M.doc
27 L_B.doc

引用自:https://unix.stackexchange.com/questions/173884