Если в исходном файле нет пустых строк (двух последовательных новых строк ), вы можете преобразовать каждую из ␁
в две новые строки с помощью sed. Это создаст файл (или поток ), который имеет пустую строку в качестве разделителя каждой записи. Затем awk (с пустым RS )способен разделить каждую "пустую строку" файлового (потока )с разделителями на "записи".
Описание может показаться сложным, но посмотрите на код:
sed 's/␁/\n\n/g' file | awk -v RS='' -vf="./script" '{print|f;close(f)}'
Если вам действительно нужно преобразовать символ со значением байта 0x01, замените ␁
на \x01
в команде sed.
Oneliner с использованиемfind
:
find "$path" -iname '*.txt' -exec cp {} "$dest" \; -exec sh -c "cat {} >> $dest/$output" \;
Если я правильно понял, вы можете заменить
do
cp $i $dest;
done
с
do
cat $i>>${dest}/${output};
done
Добавляет результаты в выходной файл.
вопрос :текстовые файлы в $path, есть ли подкаталоги, в которые вы хотите спуститься, чтобы найти все текстовые файлы? Если нет, то find
не нужен, достаточно for file in "$path"/*.txt
.
На самом деле,вам не нужен цикл, если все файлы находятся в одном каталоге:
cp -t "$dest" "$path"/*.txt
cat "$path"/*.txt > "$dest/$output"
Обратите внимание, что переменная в фигурных скобках ${var}
не совпадает с переменной в кавычках"$var"