2012-10-08 56 views
1

我有一个包含12列数据的文件。如果列5等于“A”,列12等于“Z”,我想删除/删除整行。这可能使用SED吗?使用SED删除有多个字段匹配的行

+2

你能用一个数据样本更新你的问题吗?如何定义“列”? – choroba

+0

你只是要求sed,还是一般使用unix工具? – johv

回答

2

您可以。假设您的列用空格分隔:

sed -i -e '/\([^ ]* *\)\{4\}A *\([^ ]* *\)\{6\}Z/d' file 

-i标志用于编辑文件的地方。

[^ ]* *模式匹配零个或多个(由星号表示)字符,它们不是空格(由括号中的^后面的空格字符指示),后跟零个或多个空格。将这个模式放在反斜杠括号之间,我们可以将它分组到单个表达式中,然后我们可以使用反斜杠来重复表达式。最初四次,然后匹配一个A后跟空格,然后该模式再次重复六次,然后是Z

希望这有助于=)

2

你可以用sed做到这一点,但它与awk容易得多:

awk '! ($5 == "A" && $12 == "Z")' input-file 

awk '$5 != "A" || $12 != "Z"' input-file 
0
perl -F -ane 'print unless($F[4] eq "A" and $F[11] eq "Z") your_file 

如下测试:

> cat temp 
1 2 3 4 5 6 7 8 9 10 11 12 
1 2 3 4 A 6 7 8 9 10 11 Z 
> perl -F -ane 'print unless($F[4] eq "A" and $F[11] eq "Z")' temp 
1 2 3 4 5 6 7 8 9 10 11 12 
>