通过一列中的匹配模式从文本文件中选择行

时间:2013-07-04 08:49:28

标签: regex perl sed awk pattern-matching

我有一个以下格式的文件。

Table_name Value
Employee   0
student    50
Payroll    0
animals    20

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

预期输出为

student    50
animals    20

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

5 个答案:

答案 0 :(得分:2)

这可行:

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

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

关于邮件提醒,我认为您最好显示一些代码以获得引用点。

答案 1 :(得分:2)

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

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

答案 2 :(得分: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

答案 3 :(得分:1)

为什么不perl:

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

答案 4 :(得分:1)

非常简单地使用awk,

awk -F " " '{if($2 > 0) print $0}' your_file
相关问题