2

$4 が 1 行の場合、テキスト ファイルから行を削除したい

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を使用する 1 つの方法:-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 に答える