linux - 使用awk时如何将数字和单位与变量分开

标签 linux awk

在一个 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/

相关文章:

linux - grep -o 并使用 ls 显示部分文件名

c# - 客户端终结点配置 '*' 未在 1 个终结点、WCF、Mono 中找到

linux - 无法在 openSuse 11.4 - 2.6.37 中使用 pthread_setschedparam() 设置线程优先级(仅限!)

linux - 如何合并唯一值和重复列

linux - 如何将管道结果分配给 Bash 中的变量

awk - 在 Linux 中引用文件的行

linux - 如何使用 udev 识别设备

c - 锁定 Linux 串口

bash - 使用 awk 在列中插入日期

linux - 基本 Linux bash 命令说明 : awk and others