Parsing the following with awk
:
<code>$> df -h /
Filesystem Size Used Avail Use% Mounted on
rootfs 476G 370G 106G 78% /
</code>
<code>$> df -h /
Filesystem Size Used Avail Use% Mounted on
rootfs 476G 370G 106G 78% /
</code>
$> df -h /
Filesystem Size Used Avail Use% Mounted on
rootfs 476G 370G 106G 78% /
If I use an explicit match for the G’s on the values, it works as expected:
<code>$> awk -v indrive="/dev/sda1" 'NR!=1{gsub(/G/,""); print $2,$4,indrive}' <(df -h /)
476 106 /dev/sda1
</code>
<code>$> awk -v indrive="/dev/sda1" 'NR!=1{gsub(/G/,""); print $2,$4,indrive}' <(df -h /)
476 106 /dev/sda1
</code>
$> awk -v indrive="/dev/sda1" 'NR!=1{gsub(/G/,""); print $2,$4,indrive}' <(df -h /)
476 106 /dev/sda1
However, if I genericize it w/a char class:
<code>awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[[:alpha:]]/,""); print $2,$4,indrive}' <(df -h /)
370 78% /dev/sda1
</code>
<code>awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[[:alpha:]]/,""); print $2,$4,indrive}' <(df -h /)
370 78% /dev/sda1
</code>
awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[[:alpha:]]/,""); print $2,$4,indrive}' <(df -h /)
370 78% /dev/sda1
Not sure where 370 and 78% are coming from.
Update: I actually get the same from:
<code>awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[a-zA-Z]/,""); print $2,$4,indrive}' <(df -h /)
370 78% /dev/sda1
</code>
<code>awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[a-zA-Z]/,""); print $2,$4,indrive}' <(df -h /)
370 78% /dev/sda1
</code>
awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[a-zA-Z]/,""); print $2,$4,indrive}' <(df -h /)
370 78% /dev/sda1
But with [[:upper:]]
it seems to work fine:
<code>awk -v indrive="/dev/sda1" 'NR!=1{gsub("([[:upper:]])*",""); print $2,$4,indrive}' <(df -h /)
476 106 /dev/sda1
</code>
<code>awk -v indrive="/dev/sda1" 'NR!=1{gsub("([[:upper:]])*",""); print $2,$4,indrive}' <(df -h /)
476 106 /dev/sda1
</code>
awk -v indrive="/dev/sda1" 'NR!=1{gsub("([[:upper:]])*",""); print $2,$4,indrive}' <(df -h /)
476 106 /dev/sda1