0

我有以下格式的文件。

Table_name Value
Employee   0
student    50
Payroll    0
animals    20

我需要获取值非零的整行。

预期的输出将是

student    50
animals    20

如果所有行的值都为零,我应该收到类似“所有值都为零”的邮件警报。

4

5 回答 5

2

GNU 的代码:

$sed '/\S+\s+[0]+\b/d' 文件
表名值
学生 50
动物 20
$sed -r '/\S+\s+([1-9]|[0]+[1-9])/!d' 文件
学生 50
动物 20
于 2013-07-04T19:02:52.117 回答
2

这可以工作:

$ awk '$2' file
Table_name Value
student    50
animals    20

如果第二个字段不是0,则条件被评估为 true - 请注意,这{print $0}是默认块,awk因此如果这是您要执行的唯一操作,则可以省略它。

关于邮件警报,我认为您最好显示一些代码以获得参考点。

于 2013-07-04T08:50:16.183 回答
2

以下 awk 应该满足您的两个要求:

awk 'NR>1 && $2 {nz=1;print}; END{if (!nz) print "all zeroes, send email"}' file
  • 您只需要替换print "all zeroes, send email"为您的邮件发送命令。
于 2013-07-04T08:56:03.720 回答
1

为什么不 perl:

perl -ane 'print if($.!=1 && $F[1]!=0)' your_file
于 2013-07-04T09:23:31.500 回答
1

用awk很简单,

awk -F " " '{if($2 > 0) print $0}' your_file
于 2013-07-04T11:55:56.150 回答