所以我有一些输出,如下:
Total Size: 999.4 GB (999360274432 Bytes) (exactly 1951875536 512-Byte-Units)
Volume Free Space: 320.4 GB (320392282112 Bytes) (exactly 625766176 512-Byte-Units)
我想把它告诉:
Total Size: 999.4 GB
Free Space: 320.4 GB
但是使用awk '{ print $1 " " $2 " " $3 " " $4 }'
删除第二个'GB',因为第一行有四个要返回的字段,第二行有五个。
我知道必须有比使用substr更好的,更好的方式:
awk '{ print substr( $0, 0, 37 ) }'
(这让我很接近)。
或者我应该使用sed吗?
答案 0 :(得分:4)
这可以通过将字段分隔符更改为:
或(
:
$ awk -F'[:(]' '{ print $1":"$2 }' file
Total Size: 999.4 GB
Volume Free Space: 320.4 GB
如果您要删除Volume
:
$ awk -F' *[:(] *' '{ sub(/^ *(Volume)? */, ""); printf "%-10s: %s\n",$1,$2 }' file
Total Size: 999.4 GB
Free Space: 320.4 GB
如果您的输入不仅包含空格而且还有标签,则需要更改上述内容。在那种情况下:
$ awk -F' *[:(][[:space:]]*' '{ sub(/^[[:space:]]*(Volume)?[[:space:]]*/, ""); printf "%-10s: %s\n",$1,$2 }' file
Total Size: 999.4 GB
Free Space: 320.4 GB
$ awk -F' *[:(][[:space:]]*' '/Size/{s=$2} /Free/{f=$2} END{ printf "Total Size: %s\nFree Space: %s\nRatio: %s%%\n",s,f,100*f/s }' file
Total Size: 999.4 GB
Free Space: 320.4 GB
Ratio: 32.0592%
答案 1 :(得分:0)
告诉awk使用不同的字段分隔符。在这种情况下,您有一个冒号,用于将文本与值分开。实际上,冒号成为您的字段分隔符:
cat <content> | awk -F: '{ print $1 $2 }'
然后字段$ 1包含前导文本,而字段$ 2包含后面的所有内容。