在/ nobackup中具有一组具有磁盘空间的用户。我想过滤使用更多70G空间的用户
输入格式: 磁盘空间目录/用户名
输入:
351G /nobackup/dwoo
80G /nobackup/snjos
73G /nobackup/ka
67G /nobackup/mseer
67G /nobackup/monche
65G /nobackup/sambut
64G /nobackup/submee
64G /nobackup/jushe
64G /nobackup/dichr
63G /nobackup/n
使用AWK修改此输出以仅在磁盘空间大于70G时打印名称
cat /tmp/test | awk '{var=substr($1, 1, length($1)-1); split($2,a,"/"); if(var > 70) {print a[3]}}'
在输出中我只会得到
snjos
ka
我应该去哪里
dwoo
snjos
ka
答案 0 :(得分:1)
因为$ 1是一个字符串(它包含非数字),所以>
运算符是一个 lexical 比较(即字典顺序),其中“ 3” <“ 7”。您需要先将$ 1转换为数字:通过添加零将其置于数字上下文中。
if ($1 + 0 > 70) {print a[3]}
答案 1 :(得分:1)
您正在定义var
,但从未使用过。我建议让awk去除G并通过更改字段分隔符来分割路径:
awk '$1 > 70 { print $NF}' FS=[G/] /tmp/test
请注意,这种方法会错误地匹配使用800M的用户,但这是您的方法固有的缺陷,需要其他解决方案。
答案 2 :(得分:0)
考虑到您拥有Linux O.S,然后尝试以下操作。恕我直言,无需将磁盘空间值放入Input_file并直接与df
一起使用awk
命令读取它们。
df -hP | awk '/nobackup/ && && $3 ~ /G/ && $3+0>70'