我有一个包含条目的样本数据文件 (sample.log)
0.0262
0.0262
0.7634
5.7262
0.abc02
我需要过滤掉包含非数字数据的行,在上面的行中,最后一个条目。
我试过了
sed 's/[^0-9]//g' sample.log
它删除了非数字行,但也删除了小数值,我得到的输出是
00262
00262
07634
57262
如何在消除非数字行后保留原始值。我可以使用 tr 还是 awk
最佳答案
你不能用 sed 或 grep 或任何其他不理解数字的工具来稳健地完成这项工作,你需要 awk 代替:
$ cat file
1e3
1f3
0.1.2.3
0.123
$ awk '$0==($0+0)' file
1e3
0.123
您可以使用 sed 解决方案做的最好的事情是:
$ sed '/[^0-9.]/d; /\..*\./d' file
0.123
它会删除所有包含除数字或句点以外的任何内容的行,然后删除所有包含 2 个或更多句点(例如 IP 地址)但仍无法将指数表示法识别为数字的行。
如果您有十六进制输入数据和 GNU awk(参见 @dawg's comment below):
$ echo "0x123" | awk --non-decimal-data '$0==($0+0){printf "%s => %f\n", $0, ($0+0)}'
0x123 => 291.000000
关于linux - 删除 bash 中包含非数字条目的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35822141/