awk打印超过2个十进制值,尾随零

时间:2014-08-26 10:28:57

标签: linux shell unix awk

以下是我的输入文件,

input.txt

17.0
17.12
17.123
17.1234
17.120
17.1230
17.12340
17.00
17.000
17.0000

我希望输出如下

output.txt

17.120
17.1230
17.12340
17.000
17.0000

即。我需要超过2个小数点的值,尾随零。我使用了下面的awk,但输出文件也包含17.00。如何忽略这一点。

awk '/^[0-9]+[.][0-9][1-9]*0/' input.txt

awk的输出

17.120
17.1230
17.12340
17.00
17.000
17.0000

3 个答案:

答案 0 :(得分:3)

我不确定您为什么要使用awkgrep来做这件事。此外,如果您知道您的输入仅包含与点前面的任何内容匹配的有效数字,则非常不必要。

$ grep '[.]...*0$' input.txt
17.120
17.1230
17.12340
17.000
17.0000

$ grep -P '[.][0-9]{2,}0$' input.txt
17.120
17.1230
17.12340
17.000
17.0000

要修复您的模式,只需添加一个[0-9]类;匹配“至少两个”意味着恰好匹配两个([0-9][0-9])加零或更多[0-9]*):

$ awk '/[.][0-9][0-9][0-9]*0$/' input.txt
17.120
17.1230
17.12340
17.000
17.0000

或使用+

$ awk '/[.][0-9][0-9]+0$/' input.txt
17.120
17.1230
17.12340
17.000
17.0000

答案 1 :(得分:1)

通过sed,

$ sed -n '/^[0-9][0-9]\.[0-9][0-9]\+0$/p' file
17.120
17.1230
17.12340
17.000
17.0000

通过awk,

$ awk '/^[0-9][0-9]\.[0-9][0-9]+0$/' file
17.120
17.1230
17.12340
17.000
17.0000

答案 2 :(得分:1)

计算.之后的字段数:

$ awk -F. '/0$/ && (split($2,a,"")>2)' file
17.120
17.1230
17.12340
17.000
17.0000
  • 检查该行是否以0结尾。
  • 使用split()计算点后的位数。如果超过2,则检查为True。
  • 当两个条件完成时,将打印该行。