awk在第1列中打印大于零的行

时间:2016-06-14 12:22:24

标签: linux bash shell awk scripting

我正在尝试打印可用空间大于零的目录名称。

  #Listed all the directory and their consumed space.
    du -sm storage*
    365     storage1
    670     storage2
    1426    storage3

我的阈值为1000M,所以我试图在相对于提供的阈值的这些目录中打印可用空间。

du -sm storage* | awk -v threshold="1000" '$1>0{print $1=threshold-$1,$2}'
635 storage1
330 storage2
-426 storage3

所以,我想打印那些空闲大小为正整数的目录。类似的东西:

635 storage1
330 storage2

有任何更正吗?

3 个答案:

答案 0 :(得分:3)

你可以这样写,

awk -v threshold="1000" '{$1=threshold-$1} $1 > 0'

示例

awk -v threshold="1000" '{$1=threshold-$1} $1 > 0' input
635 storage1
330 storage2

它的作用是什么?

  • $1=threshold-$1设置相对于阈值的第一列。

  • $1 > 0检查派生的第一列是否大于零。如果此表达式的计算结果为true,则会打印整个输入行。

答案 1 :(得分:2)

我觉得这太复杂了。如果您只想检查大小是否为正且低于给定阈值,请说:

awk -v threshold=1000 '0 < $1 && $1 < threshold'

测试

$ cat file
635 storage1
330 storage2
-426 storage3

$ awk -v thr=1000 '0 < $1 && $1 < thr' file
635 storage1
330 storage2

答案 2 :(得分:1)

只需检查$1 > 0

中的awk即可
du -sm storage*|awk '{if ( $1 > 0 ) print }'

du -sm storage*|awk  '$1>0'