在文件中乘以两个值并以数字格式获得输出意味着在十进制值之后它不应该给出0

时间:2016-05-25 17:40:05

标签: unix awk

我想检查第13列和第15列,如果两者相等则应返回“True”

输出 0.015 ABC 87 1558 1 1 4-30-16 4-30-16 917303625135 9141079167560945 1558 103.0000 1.545 1.71667 1.5450

使用的命令 awk -F“”'{if($ 6 == 1){打印$ 1,$ 2,$ 3,$ 4,$ 5,$ 6,$ 7,$ 8,$ 9,$ 10,$ 11,$ 12,$ 12 * $ 1,$ 12/60,$ 13, $ 14,$ 15,$ 16,$ 17,$ 18,$ 19,$ 20}其他{打印$ 1,$ 2,$ 3,$ 4,$ 5,$ 6,$ 7,$ 8,$ 9,$ 10,$ 11,$ 12,$ 12 * $ 1,$ 12/60,$ 13 ,$ 14,$ 15,$ 16,$ 17,$ 18,$ 19,$ 20}}'|头-1 -

我得到1.5450这就是我得到“假”的原因。

1 个答案:

答案 0 :(得分:1)

您可以使用sed

for num in 1.5850 15.8900 1.585000 2.034; do
   printf "Input: %10s ==> " "${num}"
   sed 's/[0]*$//' <<< "${num}"
done

结果:

Input:     1.5850 ==> 1.585
Input:    15.8900 ==> 15.89
Input:   1.585000 ==> 1.585
Input:      2.034 ==> 2.034

当您在10中保留重要的零时,问题会变得更加复杂。我扩展了测试用例和解决方案:

for num in 1.5850 15.8900 1.585000 2.034 30 12.0; do
   printf "Input: %10s ==> " "${num}"
   sed 's/\(\.[0-9]*[1-9]\)[0]*$/\1/; s/\.0$//' <<< "${num}"
done

给出了

Input:     1.5850 ==> 1.585
Input:    15.8900 ==> 15.89
Input:   1.585000 ==> 1.585
Input:      2.034 ==> 2.034
Input:         30 ==> 30
Input:       12.0 ==> 12