1

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

4

3 回答 3

3

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

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

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

该模式[^ ]* *匹配零个或多个(由星号表示)不是空格的字符(由^括号中的空格字符表示)后跟零个或多个空格。

将此模式放在反斜杠括号之间,我们可以将其组合成一个表达式,然后我们可以使用反斜杠大括号重复表达式。最初四次,然后匹配一个A后跟空格,然后该模式再次重复六次,然后是Z.

希望这会有所帮助=)

于 2012-10-08T19:23:25.617 回答
2

您可以使用 来做到这一点sed,但使用 会更容易awk

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

或者

awk '$5 != "A" || $12 != "Z"' input-file
于 2012-10-08T19:38:14.167 回答
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
>
于 2012-10-09T07:38:39.057 回答