このコマンドは次のとおりです。
awk '{for(x=1;x<=NF;x++)if($x~/0.00000/){sub(/0.00000/,++i)}}1'
このコマンドは、ファイル内の「0.00000」を見つけて、1から始まる増分数で置き換えることを知っています。 'x<=NF' と末尾の数字 1 "{sub(/0.00000/ ,++i)}}1" を除くほとんどすべてを理解します。
また、同じことをしたいのですが、一致を0から始まる増分数に置き換える場合は、これが正しいです。
awk '{for(x=0;x<=NF;x++)if($x~/0.00000/){sub(/0.00000/,++i)}}1' file
ベストアンサー1
NF
値が現在のレコードのフィールド数に設定された内部 Awk 変数です。だから
for(x=1;x<=NF;x++)
すべてのフィールドを繰り返します。式の末尾の数字は、パターンが1
「true」と評価されたときに基本操作を使用してレコード全体を印刷する簡単な方法です。
awkルールでは、モードまたはアクションのいずれかを省略できますが、両方を省略することはできません。モードを省略すると、入力ラインごとに演算が行われます。このジョブを省略すると、デフォルトのジョブはパターンに一致するすべての行を印刷することです。1
0
代わりに、数値の増加を開始するには、1
プレフィックスを++i
サフィックスに置き換えることができますi++
。
awk '{for(x=1;x<=NF;x++)if($x~/0.00000/){sub(/0.00000/,i++)}}1'
前任者。
$ echo 'foo 0.00000123 bar' | awk '{for(x=1;x<=NF;x++)if($x~/0.00000/){sub(/0.00000/,++i)}}1'
foo 1123 bar
しかし、
$ echo 'foo 0.00000123 bar' | awk '{for(x=1;x<=NF;x++)if($x~/0.00000/){sub(/0.00000/,i++)}}1'
foo 0123 bar
$