El bucle For dentro de otro no funciona

El bucle For dentro de otro no funciona
#! /bin/bash
for (( l = 1 ; l <= 50; ++l )) ; do
       for (( k = 1 ; k <= 1000; ++k )) ; do
       sed -n '$l,$lp' $k.dat >> ~/Escritorio/$l.txt
       done
done

El script se encuentra en una carpeta junto con 1000 archivos DAT, cada uno con 50 líneas de texto.

Los archivos dat se llaman 1.dat, 2.dat,....,1000.dat

Mi propósito es crear archivos l.txt, donde l.txttiene la línea l de 1.dat, la línea l de 2.dat, etc. Para eso, uso el sedcomando para seleccionar el archivo l de cada archivo dat.

Pero cuando ejecuto el script anterior, el texto creado no tiene nada dentro...

¿Dónde está el error?

Respuesta1

for LINE in {1..50}; do
    for FILE in {1..1000}; do
        sed -n "${LINE}p" "${FILE}.dat" >>"~/Escritorio/${LINE}.dat"
    done
done

En su secuencia de comandos está utilizando comillas simples para la expresión sed, las variables no se expanden dentro de comillas simples, debe usar comillas dobles.

También hay una línea con awk que puede hacer lo mismo:

awk 'FNR<=50 {filename=sprintf("results/%d.dat", FNR); print >> filename; close(filename)}' *.dat

Simplemente cree el directorio de resultados o cámbielo en el comando a otro, ~no se expande al inicio allí.

Respuesta2

¿Qué tal este comando awk? prueba con un pequeño conjunto de archivos dat

awk '{file=FNR".txt"; print $0 > file}' *.dat

información relacionada