Цикл внутри другого не работает

Цикл внутри другого не работает
#! /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

Скрипт находится в папке вместе с 1000 файлами DAT, каждый из которых содержит 50 строк текста.

Файлы dat называются 1.dat, 2.dat,....,1000.dat

Моя цель — создать файлы l.txt, в которых l.txtесть строка l 1.dat, строка l 2.datи т. д. Для этого я использую sedкоманду для выбора файла l каждого файла dat.

Но когда я запускаю приведенный выше скрипт, созданный txt-файл не содержит ничего внутри...

Где ошибка?

решение1

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

В вашем скрипте вы используете одинарные кавычки для выражения sed, переменные не раскрываются внутри одинарных кавычек, вам нужно использовать двойные кавычки.

Также есть однострочник с awk, который может сделать то же самое:

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

Просто создайте каталог результатов или измените его в команде на другой, но он ~не будет расширяться до домашнего каталога.

решение2

как насчет этой команды awk? попробуйте с небольшим набором файлов dat

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

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