в первой строке вашего скрипта указано, что это шелл-скрипт, но в вопросе вы называете его баш-скриптом. поправьте для начала либо вопрос, либо первую строку.
$ bash --version | head -1
GNU bash, версия 5.1.16(1)-release (x86_64-pc-linux-gnu)
$ cat data1.txt ${line} >> data1.txt
cat: data1.txt: ввод и вывод в один файл
shurshur, другого ответа где для решения задачи используют один cat я не нашел, есть еще тот что в комментариях к вопросу echo $(cat data.txt)
но он тоже не совсем рабочий
повторяю свой вопрос выше
простите, но я не вижу вашего быстрого и простого решения задачи с помощью одного cat
xotkot, ну, я думаю что автор вопроса дальше придёт с вопросом как вставить между "строками" пробелы :)
В любом случае, использование awk выглядит довольно странно для этой задачи. И хорошо ещё, что он в $0 не сохраняет перенос строки, на что регулярно напарываются люди с однострочниками на perl/python.
ну, я думаю что автор вопроса дальше придёт с вопросом как вставить между "строками" пробелы :)
я так понимаю простого решения с cat у вас всё же нету ? или есть ?
В любом случае, использование awk выглядит довольно странно для этой задачи.
наоборот, awk очень даже подходит для подобных манипуляций с текстом, легко пишется, легко читается, никаких лишних и магических действий.
И хорошо ещё, что он в $0 не сохраняет перенос строки, на что регулярно напарываются люди с однострочниками на perl/python.
причем здесь perl/python ? у awk с этим всё просто, у него есть разделители строк(RS - по умолчанию перевод строки) и разделители полей(FS - по умолчанию пробельные символы) манипулируя которыми можно творить чудеса, и это базовые понятия которые обретаешь когда потратишь хотя бы пол часа на изучения данного инструмента.
xotkot, ну похоже автор решил без переносов строк. Что странно. Я на это не обратил внимание. А попытка складывать всё во временный файл с фиксированным именем меня впечатлила сразу и я пошёл там объяснять.
Я awk использую крайне редко и больше для тривиального форматирования вывода (впрочем, я им часто даже cut заменяю по привычке), потому что никаких преимуществ перед набросать скрипт на более универсальном языке я для себя не вижу. То же самое с sed - его использую для in-place редактирования, а так в случае чуть более сложной регулярки перехожу на perl -pne.
Да-да, а если доступа на запись в текущий каталог нет или место закончилось, то скрипт упадёт. Я уж не говорю о том, что при падении скрипта останется файл. И про то, что пересекающийся во времени запуск двух скриптов вызовет огромные проблемы...
Вот от сценария с пересечением двух сеансов во времени вообще нет спасения. Я думаю что его надо отдельно рассмотреть как такой-себе краш-тест. И он является краш-тестом не только для данного bash-приложения но и для многих других приложений которые используют сырой файловый доступ. Как workaround - можно просто ко всем output-файлам добавлять метку времени+PID процесса-родителя.
mayton2019, а если исходный файл будет размером в террабайт, то от временного файла толку будет ещё меньше. При работе через pipe хотя бы всё ограничивается размером буфера...