我们使用下面的awk
命令来拆分字母数字文本中的数字和字母。
echo "1.5GB" |awk '{ gsub(/([[:alpha:]]+|[[:digit:].-]+|[^[:alnum:].-]+)/,"&\n",$0) ; print "size="$1"\nsymbol="$2}'
此命令以Ubuntu 20.04
为单位提供所需结果。结果为
size=1.5
symbol=GB
但在Ubuntu 18.04
中,它给出了以下结果,这不是预期结果
size=1.5GB
symbol=
3条答案
按热度按时间xdnvmnnf1#
1996年的mawk是awk的一个最小功能版本,是为了提高执行速度而设计的。它不符合POSIX,所以不应该期望它支持POSIX字符类。如果可能的话,请获得一个新版本,或者更改此设置:
更改为:
例如:
o3imoua42#
我无法复制这个问题-我所有的
awk
输出都以相同的散列值结束:9q78igpj3#
虽然不清楚mawk 1.3.4与1.3.3相比有什么变化使代码能够正常工作,但如果意图是将输入的数字部分显示为
size
,将字母部分显示为symbol
,即使缺少了这两个部分中的一个,因为对gsub
的调用使它获得的字母或数字字符成为第一个字段。例如,如果输入只是GB
,则代码将输出:我认为这不是我们想要的。
一个更好的方法是从输入中删除字母部分,使其成为
size
,并从输入中删除数字部分,使其成为symbol
: