以下是我的输入文件,
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
答案 0 :(得分:3)
我不确定您为什么要使用awk
,grep
来做这件事。此外,如果您知道您的输入仅包含与点前面的任何内容匹配的有效数字,则非常不必要。
$ 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。