aplicando awk en carpetas múltiples y subarchivos

aplicando awk en carpetas múltiples y subarchivos

Tengo 10 carpetas con nombres consecutivos: libro_1, libro_2..... libro_10 y cada carpeta tiene un archivo txt con el mismo nombre que la carpeta. Por ejemplo: libro_1 tienesolobook_1.txt y contiene material histórico (solo texto).

Necesito ejecutar un script AWK cuya salida debe agregarse por orden al archivo de salida. ¿Cómo puedo generar un bucle que recorra mis carpetas y extraiga el archivo necesario de cada carpeta?

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

Mi salida debería verse así:

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

etcétera

¡gracias por su ayuda!

Respuesta1

La forma más sencilla de usar cualquier awk en un shell que admita la {1..10}construcción para generar un rango de números (de lo contrario, solo use $(seq 10)) es:

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

pero si realmente quisieras hacerlo todo en awk sería (usando GNU awk para ARGIND y 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

Si alguno de los archivos del "libro" no puede existir, entonces necesitará agregar alguna protección contra eso.

información relacionada