一致する条件の後に以下を印刷しますか?

一致する条件の後に以下を印刷しますか?

コマンドを使用する場合:awk 'f&&!--f;{if(length($1)>8){f=1}}' awk.write行を一致させた後に行を印刷できます。

使い方はわかりますが、実際にはどのような機能をしているのかflagsわかりませんか?&&!--f

this line 1 no un1x
this lines 22 0
butbutbut this 33 22 has unix
but not 1
THIS is not
butbutbut ffff
second line

ベストアンサー1

一度見てみましょうf&&!--f。ここで基本操作(行印刷)を実行するには、条件fと条件の両方をTrueと評価する必要があります。論理的です。!--f&&AND

awkの評価ではない場合、この文は真です0。したがってf、そうでない場合、最初の条件はtrueです0

!--fすぐに減少することを意味しますf1また、f--1ずつ減少しますが、少し後にのみ減少します。を参照)。この文書詳細はこちら)。そして!前の文の真理値を否定します。したがってfこの場合1、別名 False--fになります0。これが!事実になります。これはifがf等しくない状況を捉える必要があります1

この簡単な例では、2番目のテストは必ずしも必要ではありませんが、fリセットが行われたことを確認します0。より短いバージョンは次のとおりです。

awk 'f&&!--f;length($1)>8{f=1}' awk.write

おそらく理解しやすくなります。

awk 'f&&{print;f=0};length($1)>8{f=1}' awk.write

おすすめ記事