鉴于这种格式:
DISKGROUP NAME GB ALLOCATED GB USED GB FREE USABLE GB PCT USED STATUS
-------------- --------------- --------------- --------------- --------------- -------- --------------------
DISK_1 1,117.40 390.48 726.92 223.78 34.95 MOUNTED
DISK_2 1,117.40 65.97 1,051.43 386.04 5.90 MOUNTED
Run Code Online (Sandbox Code Playgroud)
使用单个bash命令,如何可靠地从GB FREE获取值?字段之间的空格数可以非常基于字段大小,因此我无法指定具有剪切的静态空格数.有没有办法使用空格作为分隔符,但空格的数量是可变大小?
谢谢你的任何想法
你可以使用awk这个:
awk 'BEGIN {print "GB FREE\n--------"} NR>2{print $4}' INPUT_FILE
Run Code Online (Sandbox Code Playgroud)
awk's BEGIN语句来打印标题GB FREE and -------.这是因为输入文件中的标题在标题中有空格.这可以抛弃awk脚本.awk's内置变量NR.由于我们不希望打印第1行和第2行,因此我们保持条件NR>2.这样awk将跳过前两行并从第3行开始打印.awk默认情况下,分隔符或字段分隔符是空间(一个或多个).由于您的文件有,我们不需要设置FS内置变量.由空格分隔的每个字段都成为一列,可以使用$和访问column number.既然你想要GB FREE4列,我们就做了print $4.column 1已经DISK_2我们添加另一种模式的语句.使用NR>2 && $1~/DISK_2/确保我们不打印第1行和第2行并查找其中column 1包含的行DISK_2并打印column 4这些行.awk 'NR>2{print $4}' INPUT_FILE
Run Code Online (Sandbox Code Playgroud)
要么
awk 'NR>2 && $1~/DISK_2/{print $4}' INPUT_FILE
Run Code Online (Sandbox Code Playgroud)
[jaypal:~/Temp] cat file
DISKGROUP NAME GB ALLOCATED GB USED GB FREE USABLE GB PCT USED STATUS
-------------- --------------- --------------- --------------- --------------- -------- --------------------
DISK_1 1,117.40 390.48 726.92 223.78 34.95 MOUNTED
DISK_2 1,117.40 65.97 1,051.43 386.04 5.90 MOUNTED
[jaypal:~/Temp] awk 'BEGIN {print "GB FREE\n--------"} NR>2{print $4}' file
GB FREE
--------
726.92
1,051.43
Run Code Online (Sandbox Code Playgroud)
[jaypal:~/Temp] awk 'BEGIN {print "GB FREE\n--------"} NR>2 && $1~/DISK_2/{print $4}' file
GB FREE
--------
1,051.43
Run Code Online (Sandbox Code Playgroud)