Я столкнулся с вопросом (на самом SO), где OP должен выполнять редактирование и сохранять операции в самих Input_file (s).
Я знаю, что для одного Input_file мы могли бы сделать следующее:
awk '{print "test here..new line for saving.."}' Input_file > temp && mv temp Input_file
Теперь предположим, что нам нужно внести изменения в один и тот же формат файлов (предположим, здесь .txt).
Что я пробовал / думал для этой проблемы: его подход заключается в прохождении цикла for .txt файлов, и вызов singleawk
- это болезненный и НЕ рекомендуемый процесс, поскольку он будет тратить ненужные циклы ЦП и для большего количества файлов будет больше медленный.
Итак, что можно сделать здесь, чтобы выполнить редактирование на месте для нескольких файлов с NON GNU, awk
который не поддерживает опцию на месте. Я также прошел через эту ветку Сохранение изменений на месте с помощью awk, но для NON GNU awk Vice нет ничего особенного и для изменения нескольких файлов на месте внутри awk
себя, так как не GNU awk не будет иметь inplace
опцию для этого.
ПРИМЕЧАНИЕ. Почему я добавляюbash
тег, поскольку в своей части ответа я использовал команды bash, чтобы переименовать временные файлы в их настоящие имена Input_file, поэтому добавляю их.
РЕДАКТИРОВАТЬ: В соответствии с комментарием Эда сэра, добавив здесь пример примеров, хотя назначение кода этого потока может быть использовано и для общего редактирования на месте.
Пример входного файла (ов):
cat test1.txt
onetwo three
tets testtest
cat test2.txt
onetwo three
tets testtest
cat test3.txt
onetwo three
tets testtest
Образец ожидаемого выхода:
cat test1.txt
1
2
cat test2.txt
1
2
cat test3.txt
1
2
awk
(возможно, в подоболочке) или {...}
закрытую группу, а затем записать результаты в нужный выходной файл (либо для каждого входного файла, или объединенный файл для всех входных файлов). Затем вы просто перенаправляете выходные данные вложенной или заключенной в скобки группы в текущий файл, в который выполняется запись? Простое включение строки входных файлов после awk
команды будет последовательно обрабатывать все файлы (или что-то подобное) ??
awk {..} file1 .. fileX
записью измененного файла, как, например, temp01
и в вашей следующей итерации при обработке следующего файла, используйте a, mv -f tmp01 input01
чтобы перезаписать входной файл с измененными данными; или (2) просто напишите новый каталог ./tmp/tmp01 ... ./tmp/tmp0X
во время выполнения awk
скрипта и выполните цикл с файлами в ./tmp
каталоге и, например, mv -f "$i" "input_${i##*[^0-9]}"
(или любым другим расширением, которое вам нужно, чтобы заменить старые входные файлы.
awk
полного завершения кода, 2-й вариант почти такой же, как я использую в моем предложении, будет будьте благодарны, если вы можете сообщить свои мысли об этом решении, сэр.