Я зіткнувся з питанням (щодо самого SO), в якому OP повинен редагувати та зберігати операцію в Input_file (s).
Я знаю, що для одного Input_file ми могли зробити наступне:
awk '{print "test here..new line for saving.."}' Input_file > temp && mv temp Input_file
Тепер скажемо, що нам потрібно внести зміни в такий самий формат файлів (припустимо .txt тут).
Що я спробував / подумав у цій проблемі: її підхід проходить через цикл файлів .txt та виклик синглуawk
- це болісний і НЕ рекомендований процес, оскільки це витратить зайві цикли процесора і для більшої кількості файлів було б більше повільний.
Отже, що, можливо, можна зробити тут для редагування на місці декількох файлів з NON GNU, awk
який не підтримує опцію inplace. Я також пройшов цей потік Збережіть модифікації на місці з awk, але для NON GNU awk vice і зміни декількох файлів на місці всередині нічого не існує нічого awk
, оскільки не в GNU awk не буде inplace
можливості для нього.
ПРИМІТКА: Чому я додаюbash
тег, оскільки у своїй частині відповідей я використовував команди bash для перейменування тимчасових файлів у їхні фактичні імена Input_file і додаючи його.
EDIT: Відповідно до коментаря Ед-сер, додаючи сюди приклад зразків, хоча мета коду цього потоку може бути використана і для загальної мети.
Зразок вхідних_файлів:
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
повного заповнення коду, другий варіант майже такий же, як я використовую в своїх пропозиціях, буде будьте вдячні, якщо ви можете повідомити свої думки щодо цього рішення, сер.