基于列值的Unix中的切割元素

时间:2013-02-21 07:12:22

标签: linux shell unix

没有shell脚本,只需一行。什么命令可以帮助您根据列值

从一行中删除

例如:

118 Balboni,Steve 23
11 Baker,Doug 0
120 Armas,Tony 13
133 Allanson,Andy 5
158 Baines,Harold 13
33 Bando,Chris 1
44 Adduci,James 1
50 Aguayo,Luis 3
5 Allen,Rod 0
94 Anderson,Brady 1

如果第3行不为零,如何在一个语句中完全删除该行?这在unix中是否可行?

4 个答案:

答案 0 :(得分:1)

假设问题确实是在询问'第三列是否为非零,不打印'或(等效)'仅在第三列为0时打印行':

使用awk

awk '$3 == 0' data

(如果第三列为零,则打印输入;否则,请忽略它。您可以在{ print }之后添加0以使操作明确。)

使用perl

perl -nae 'print if $F[2] == 0' data

使用sed

sed -n '/ 0$/p' data

答案 1 :(得分:0)

使用grep:

grep '[^0-9]0$' input 

答案 2 :(得分:0)

这就是替换原位。

perl -i -F -pane 'undef $_ if($F[2]!=0)' your_file

测试:

> cat temp
118 Balboni,Steve 23
11 Baker,Doug 0
120 Armas,Tony 13
133 Allanson,Andy 5
158 Baines,Harold 13
33 Bando,Chris 1
44 Adduci,James 1
50 Aguayo,Luis 3
5 Allen,Rod 0
94 Anderson,Brady 1
>
>
> perl -i -F -pane 'undef $_ if($F[2]!=0)' temp
> cat temp
11 Baker,Doug 0
5 Allen,Rod 0
> 

答案 3 :(得分:0)

如果您希望打印没有第三列的行以及第3列明确0的行(即,如果您将空白字段视为零),请尝试:

awk '!$3'

如果您不想打印只有2列的行,请尝试:

awk 'NF>2 && !$3'