つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

awkエラー「致命的:フィールド-1へのアクセスの試み」

 会社の仕事から解放された日曜日、自宅PCで
   プログラミング言語 awk(オーク)
の勉強をしました。
 
 今日(2024年6月23日)やったのは、テキストファイルから特定のフィールドを抽出して表示する「列選択」です。非常に基本的なawk操作と言えます。
 

 次のテキストファイルがあります。
 「awk_test.txt」というファイル名のテキストファイルです。

ka ki ku ke ko
sa si su se so
ta ti tu te to
ha hi hu he ho



 このテキストファイルから、各行(レコード)の第4フィールドと第5フィールドを抽出するには、次のとおり記述します。
 $ awk '{print $(NF-1),$NF}' awk_test.txt

 このスクリプトを実行すると、次のとおり出力されます。

ke ko
se so
te to
he ho



これで成功です。
NF」(number of fields)は、各レコードのフィールドの数が代入される組み込み変数です。そのため、$NFをprintすると、レコードの最後のフィールドが表示されます。
 また、アクション内で演算が行われるので、NFから1を引いた値、$(NF-1)をprintすると、後ろから2番目のフィールドを表示できます。


 ところが、私の場合、へんてこなエラーが出て実行されませんでした。
 どのようなエラーかというと、
  「awk: コマンドライン:1: (FILENAME=awk_test.txt FNR=7)
   致命的: フィールド -1 へのアクセスの試みです

 このようなエラーメッセージです。

 はて、さて、教科書どおりに記述しているのに、
   (・・・のはずなのに、)なぜ実行されないのか。
   
 ネット上の情報をさんざん探し回りましたが、答えは出てきません。


オーバーヒートしたヲッサンの図



 「ああでもない、こうでもない。」と考えていたら、スペック不足の私の頭脳がオーバーヒートして、ついには頭から湯気が立ち上がり始めました。
 そこで、冷却のために散歩に出ました。


改訂されたばっかりのawk教科書

 

それでは、また次の記事で。
goosyun


《2024年6月29日 追記》
 エラーの原因が判明しました。
    こちらの記事をご覧ください。