会社の仕事から解放された日曜日、自宅PCで
プログラミング言語 awk(オーク)
の勉強をしました。
今日(2024年6月23日)やったのは、テキストファイルから特定のフィールドを抽出して表示する「列選択」です。非常に基本的なawk操作と言えます。
次のテキストファイルがあります。
「awk_test.txt」というファイル名のテキストファイルです。
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
このスクリプトを実行すると、次のとおり出力されます。
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日 追記》
エラーの原因が判明しました。
⇒ こちらの記事をご覧ください。
