在一个 10 行的 awk 脚本中,我需要将一个变量的内容拆分为一个数字变量和一个单位变量。这是一个简化的例子
~$ echo 139506MB | awk '{
ex = index("KMGTPEZY", substr($1, length($1)));
val = substr($1, 0, length($1) - 2);
print ex " " val
}'
0 139506
我知道单位部分总是 2 个字符,但由于某些原因 ex
总是返回 0
而不是我希望的 MB
。
问题
知道为什么 ex
不包含该单位吗?
最佳答案
index()
函数中的逻辑是错误的,您提取的字符不是您定义的字符串的一部分。因此,您看到的是返回值 0。
对于使用 GNU Awk 将捕获的组存储到数组的正则表达式方法。使用 match()
函数,您可以执行以下操作。捕获的组存储在数组(ar
) 中,您可以从中访问元素 1 和 2。
echo 139506MB | gawk 'match($0, /([[:digit:]]+)([[:alpha:]]+)/, ary) {print ary[1] ary[2]}'
关于linux - 使用awk时如何将数字和单位与变量分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50409047/