awkの効率的プログラム


Windows10のコマンドプロンプトでgawk5を使っています。

ファイルが ss1.txt から ss10.txt の１０個あり、対応するawkプログラムも fff1.awk から fff10.awkまで10個あります。

これらをバッチファイルで実行すると10行になります。

[code]

    gawk -b -f fff1.awk ss1.txt
    gawk -b -f fff2.awk ss2.txt
    gawk -b -f fff3.awk ss3.txt
    　↓　（中間省略）
    gawk -b -f fff10.awk ss10.txt
    
[/code]

これをコンパクトにまとめたいので、下記の test.awkを作成してみたが、gawk から system関数で 子gawk
を起動するので、遅く非効率と考えています。

test.awk

[code]

    BEGIN{
    for(i=1;i<=10;i++)
    {
    cmd="gawk -b -f fff" i ".awk " "ss" i ".txt"
    system(cmd)
    close(cmd)
    }
    }
    
[/code]

system関数やgawkを二重に起動したりしない方法がうまく作成できません。  
何か良い方法をアドバイスください。お願いします。




バッチファイルならば

[code]

    FOR /L %I IN (1,1,10) DO gawk -b -f fff%I.awk ss%I.txt
    
[/code]

PowerShellならば

[code]

    for ($i = 1; $i -le 10; $i++) {
      gawk -b -f fff$i.awk ss$i.txt
    }
    
[/code]

とかでしょうか。

* * *

本質的にはawkプログラムを１つに集約するか、別言語に切り替えることをお勧めします。

