1. ホーム
  2. awk

[解決済み] awk コマンドでの `NF` の使用

2022-03-05 18:09:36

質問

私は2つのコマンドの違いが何であるかを理解しようとしています(私は2つから同じ結果を期待していました)。

ケースI

echo 'one,two,three,four,five' |awk -v FS=,  '{NF=3}1'
one two three

ケース-II

echo 'one,two,three,four,five' |awk -v FS=,  -v NF=3 '{$1=$1}1'
one two three four five

以下は、私の現在の理解です。 $1=$1 は、定義された変数を awk に再構築して使わせるために使われます。私は FS のように -v FS="," とは異なり、実質的には -v NF=3 .

質問です。なぜ NF=3 が有効にならないのに対して FS=, があります。

解決方法は?

https://www.gnu.org/software/gawk/manual/gawk.html#Options :

-v ヴァー =
--アサイン ヴァー =

変数を設定する 変数 を値に設定します。 ヴァル プログラムの実行が開始される前に

https://www.gnu.org/software/gawk/manual/gawk.html#Fields :

NF は定義済みの変数で、その値は現在のレコードのフィールド数である。 awk の値は自動的に更新されます。 NF は、レコードを読み込むたびに

最初のプログラムでは {NF=3} を上書きし、各行が読み込まれた後に NF .

2つ目のプログラムでは、最初に NF=3 を経由して -v が、その値は最初の入力行を読み込むときに awk によって上書きされます。

FS が異なるのは、awk はこの変数を決して設定しないためです。あなたが与えたどんな値も維持されます。