-1

シェルスクリプトなしで、1行で。列の値に基づいて行から切り取るのに役立つコマンド

例えば:

118 Balboni,Steve 23
11 Baker,Doug 0
120 Armas,Tony 13
133 Allanson,Andy 5
158 Baines,Harold 13
33 Bando,Chris 1
44 Adduci,James 1
50 Aguayo,Luis 3
5 Allen,Rod 0
94 Anderson,Brady 1

3番目の行がゼロでない場合、1つのステートメントで行を完全に削除するにはどうすればよいですか?これはUNIXで可能ですか?

4

4 に答える 4

1

質問が実際に「3番目の列がゼロ以外の場合は印刷しない」または(同等に)「3番目の列が0の場合にのみ行を印刷する」という質問であると仮定します。

使用awk

awk '$3 == 0' data

(3番目の列がゼロの場合は入力を出力します。それ以外の場合は無視します。アクションを明示的にするためにの{ print }後に追加できます。)0

使用perl

perl -nae 'print if $F[2] == 0' data

使用sed

sed -n '/ 0$/p' data
于 2013-02-21T07:20:49.593 に答える
0

grepの使用:

grep '[^0-9]0$' input 
于 2013-02-21T07:30:30.430 に答える
0

これにより、インプレース交換が行われます。

perl -i -F -pane 'undef $_ if($F[2]!=0)' your_file

テスト済み:

> cat temp
118 Balboni,Steve 23
11 Baker,Doug 0
120 Armas,Tony 13
133 Allanson,Andy 5
158 Baines,Harold 13
33 Bando,Chris 1
44 Adduci,James 1
50 Aguayo,Luis 3
5 Allen,Rod 0
94 Anderson,Brady 1
>
>
> perl -i -F -pane 'undef $_ if($F[2]!=0)' temp
> cat temp
11 Baker,Doug 0
5 Allen,Rod 0
> 
于 2013-02-21T07:36:09.793 に答える
0

3番目の列がない行と、3番目の列が明示的にある行を印刷する0場合(つまり、空白のフィールドをゼロと見なす場合)、次のことを試してください。

awk '!$3'

2列のみの行を印刷したくない場合は、次のことを試してください。

awk 'NF>2 && !$3'
于 2013-02-21T07:40:00.300 に答える