コマンドを使用する場合: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
すぐに減少することを意味しますf
(1
また、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