用
awk
解析以下内容:
$> df -h /
Filesystem Size Used Avail Use% Mounted on
rootfs 476G 370G 106G 78% /
如果我对值上的 G 使用显式匹配,它会按预期工作:
$> awk -v indrive="/dev/sda1" 'NR!=1{gsub(/G/,""); print $2,$4,indrive}' <(df -h /)
476 106 /dev/sda1
但是,如果我将其泛化为 char 类:
awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[[:alpha:]]/,""); print $2,$4,indrive}' <(df -h /)
370 78% /dev/sda1
不确定 370 和 78% 是从哪里来的。
更新:我实际上得到了同样的信息:
awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[a-zA-Z]/,""); print $2,$4,indrive}' <(df -h /)
370 78% /dev/sda1
但是使用
[[:upper:]]
似乎效果很好:
awk -v indrive="/dev/sda1" 'NR!=1{gsub("([[:upper:]])*",""); print $2,$4,indrive}' <(df -h /)
476 106 /dev/sda1
gsub(/[[:alpha:]]/,"")
完全删除第一个字段并更改 $2
和 $4
所指的内容。参见:
$ awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[[:alpha:]]/,""); print $0}' <(df -h /)
476 370 106 78% /