2013-07-04 30 views
0

我有以下格式的文件。通过一列中的匹配模式从文本文件中选择行

Table_name Value 
Employee 0 
student 50 
Payroll 0 
animals 20 

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

预期产出将是

student 50 
animals 20 

如果该值是零的所有行,我应该得到邮件提示,如“所有值都为零”。

回答

1

为什么不使用Perl:

perl -ane 'print if($.!=1 && $F[1]!=0)' your_file 
+0

我只有Unix环境 – Vignesh

+0

Perl是标准Unix环境的一部分。 –

2

这可以工作:

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

如果二路字段不0则条件评估为真 - 注意{print $0}awk默认块,因此它可以,如果这是唯一的动作被忽略你想要表演。

关于邮件提醒,我认为你最好展示一些你的代码来提供一个引用点。

+0

它不是'can'。它应该是'will' – Vijay

+0

我没有得到你。你的命令会给你下面的输出0 50 0 20对吗?我想要整行。 – Vignesh

+0

更具可读性:'awk'$ 2> 0'文件' – Vijay

2

继AWK应同时满足您的要求:

awk 'NR>1 && $2 {nz=1;print}; END{if (!nz) print "all zeroes, send email"}' file 
  • 你只需要与你的邮件发送命令来替换print "all zeroes, send email"
+0

太棒了!非常感谢:) – Vignesh

1

很简单使用awk,

awk -F " " '{if($2 > 0) print $0}' your_file 
+2

这很好,但请注意,您正在使用一些已在默认设置下的选项:'-F“”','print $ 0'。 – fedorqui

2

代码GNU

 
$sed '/\S+\s+[0]+\b/d' file 
Table_name Value 
student 50 
animals 20 
$sed -r '/\S+\s+([1-9]|[0]+[1-9])/!d' file 
student 50 
animals 20