aplicando awk na multiplicação de pastas e subarquivos

aplicando awk na multiplicação de pastas e subarquivos

Eu tenho 10 pastas com nomes consecutivos: book_1, book_2..... book_10 e cada pasta possui um arquivo txt com o mesmo nome da pasta. Por exemplo: livro_1 temapenasbook_1.txt e contém material histórico (somente texto).

Preciso executar um script AWK cuja saída deve ser adicionada por ordem ao arquivo de saída. Como posso gerar um loop que percorre minhas pastas e extrai o arquivo necessário de cada pasta?

awk '
    {
        script//
    }
    END { print "The output of book num $i is:  " m }' book*/book*.txt >> output.txt // m is a variable which extracts max occurences of certain words which are set in the script

Minha saída deve ficar assim:

The output of book num 1 is : 123
The output of book num 2 is : 2223

e assim por diante

obrigado pela ajuda!

Responder1

A maneira simples de usar qualquer awk em um shell que suporte a {1..10}construção para gerar um intervalo de números (caso contrário, basta usar $(seq 10)) é:

for i in {1..10}; do
    awk -v i="$i" '
        {
            script//
        }
        END { printf "The output of book num %d is : %d\n", i, m }
    ' "book_${i}/book_${i}.txt"
done > output.txt

mas se você realmente quisesse fazer tudo no awk, seria (usando GNU awk para ARGIND e ENDFILE):

awk '
    BEGIN {
        for (i=1; i<=10; i++) {
            ARGV[ARGC] = "book_" i "/book_" i ".txt"
            ARGC++
        }
    }
    {
        script//
    }
    ENDFILE { printf "The output of book num %d is : %d\n", ARGIND, m; m=0 }
'  > output.txt

Se algum dos arquivos do "livro" não existir, você precisará adicionar alguma proteção contra isso.

informação relacionada