在同一行使用sed和算术

时间:2018-02-14 04:02:33

标签: bash awk sed

所以以下变量

COMPRESSEDUNCOMPRESSED

持有一个字母数字字符串(它们存储文件大小,所以像4K,2500MB等字符串)。我想对它们做一些代数(除法),同时使用sed删除字母(K,MB等),以便实际上能够分割。像这样:

RATIO=$((COMPRESSED| sed 's/[A-Za-z]*//g' / UNCOMPRESSED | sed 's/[A-Za-z]*//g'))

如果可能的话,毫无头绪。我只是想避免用变量堵塞我的脚本。谢谢!

编辑

输入:

./prog2.sh file.txt< ---此文件将在脚本中压缩。 COMPRESSED保留压缩大小,UNCOMPRESSED保持未压缩大小。文件

预期产出:

ratio: $RATIO< ---无论COMPRESSED/UNCOMPRESSED的价值是多少(例如0.55或1/2或者这个数字是什么"

COMPRESSED = 2500MB,UNCOMPRESSED = 43000MB。我想分割这些数字,但为了做到这一点,我必须删除字符串末尾的MB,留下我25004300我想做的事情所以用代数序列中的sed来避免产生新的变量。

1 个答案:

答案 0 :(得分:2)

如果您希望得到除compressedun-compressed值,那么关注awk可能会对您有所帮助。

awk -v comp="2500MB"  -v un_comp="43000MB" 'BEGIN{print (comp+0)/(un_comp+0)}'

如果您有bash变量,并且想要将它们用于awk,请使用以下内容:

compress="2500MB"
un_compress="4300MB"
awk -v comp="$COMP"  -v un_comp="$un_compress" 'BEGIN{print (comp+0)/(un_comp+0)}'

或者,如果您想要通过压缩值除以未压缩值,那么您只能在上面的代码中更改除以部分。