2

如果 $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

4 回答 4

5

awk

awk '$4 != 1'

它是可行的sed,但要困难得多,我不会打扰:

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

或者,如果你有 GNU sed

sed -r '/^[^ ]+ +[^ ]+ +[^ ]+ +1 *$/d'
于 2013-01-27T03:26:53.660 回答
2

使用GNU sedwith-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
于 2013-01-27T03:34:15.073 回答
1

只是为了与众不同...

$ ed << \eof
g- 1$-d
w
q
eof
于 2013-01-27T03:38:57.250 回答
0

用 awk

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

于 2013-01-27T09:13:06.613 回答