

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を二重に起動したりしない方法がうまく作成できません。  
何か良い方法をアドバイスください。お願いします。


CC BY-SA 4.0
2022-07-16T08:39:40.580
90018
2022-07-16T09:04:39.053
2022-07-16T09:04:39.053
3060
53556
question
windows awk
awkの効率的プログラム


バッチファイルならば

[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プログラムを１つに集約するか、別言語に切り替えることをお勧めします。


CC BY-SA 4.0
2022-07-16T08:53:59.043
90019
2022-07-16T08:53:59.043
4236
90018
answer


コマンドプロンプトではなく、WSL2 環境が利用できるのであれば以下の様になります。興味がありましたら試してみて下さい。

[code]

    $ seq 10 | xargs -P0 -I@ gawk -b -f fff@.awk ss@.txt
    
[/code]


CC BY-SA 4.0
2022-07-16T08:56:31.207
90020
2022-07-16T09:04:29.210
2022-07-16T09:04:29.210
47127
47127
90018
answer