применение awk к нескольким папкам и подфайлам

применение awk к нескольким папкам и подфайлам

У меня есть 10 папок с последовательными именами: book_1, book_2..... book_10 и каждая папка имеет txt-файл с таким же именем, как и папка. Например: book_1 имееттолькоbook_1.txt и содержит исторический материал (только текст).

Мне нужно запустить скрипт AWK, вывод которого должен быть добавлен по порядку в выходной файл. Как мне сгенерировать цикл, который проходит по моим папкам и извлекает нужный файл из каждой папки?

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

Мой вывод должен выглядеть так:

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

и так далее

спасибо за помощь!

решение1

Простой способ использования любого awk в оболочке, поддерживающей {1..10}конструкцию для генерации диапазона чисел (в противном случае просто используйте $(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

но если бы вы действительно хотели сделать все это в awk, то это было бы так (используя GNU awk для ARGIND и 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

Если какой-либо из файлов «книги» не может существовать, то вам придется добавить некоторую защиту от этого.

Связанный контент