删除行,如果$ 4是一个

时间:2013-01-27 02:48:09

标签: sed awk

如果$ 4是一个

,我想删除文本文件中的行
123  34  A   0
23   45  A   1  
36   5   A   36
176  3   A   1

期望的输出

123  34  A   0
36   5   A   36

我需要就地编辑。我怎么能用awk或sed做到这一点?

4 个答案:

答案 0 :(得分:5)

awk

awk '$4 != 1'

这在sed是可行的,但足够困难,我不打扰:

sed '/^[^ ][^ ]*  *[^ ][^ ]*  *[^ ][^ ]*  *1 *$/d'

或者,如果你有GNU sed

sed -r '/^[^ ]+ +[^ ]+ +[^ ]+ +1 *$/d'

答案 1 :(得分:2)

使用GNU sed -i进行就地编辑,-r进行扩展正则表达式的一种方式:

sed -ri '/^\S+\s+\S+\s+\S+\s+1( |$)/d' file

如果您迫切需要就地编辑,您可能还想尝试使用perl自动分割功能。代码也更具可读性和可移植性:

perl -i -ane 'print if $F[3] != 1' file

结果:

123  34  A   0
36   5   A   36

答案 2 :(得分:1)

只是为了与众不同......

$ ed << \eof
g- 1$-d
w
q
eof

答案 3 :(得分:0)

使用awk

awk '{if($4 != 1 ) print $0}' temp.txt