当我使用awk时,“ if”条件检查对我不起作用

时间:2018-11-05 22:43:02

标签: awk

在/ 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

3 个答案:

答案 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'