Intereting Posts

Выполнение awk для каждого файла, найденного с помощью find, а затем перенаправление результата на новое имя файла

Я пытаюсь найти результаты поиска и затем выполнить awk для печати первых двух столбцов. Затем я хочу перенаправить эти результаты на новое имя файла для каждого файла, используя существующее имя файла с дополнительным суффиксом, добавленным к имени. Файлы в каталоге с исходным исходным кодом, оставшимся в файле file.txt, и новые файлы с именем file-new.txt

Например:

find -type f -iname "*.txt" -exec awk '{print $1, $2}' {} \; 

Что мне нужно добавить для этого? Будет ли использование sed лучшим выбором?

Самый простой способ – использовать перенаправление вывода awk. Перенос вывода Awk очень прост в использовании в простых случаях: файл открывается при первом переадресации, а последующие перенаправления к тому же имени файла используют существующий файловый дескриптор.

Если вы хотите добавить суффикс к имени файла, это будет так же просто, как

 find -type f -iname "*.txt" -exec awk '{print $1, $2 >(FILENAME "-new")}' {} + 

Но вы можете сделать более сложное преобразование имени файла (здесь пересчитано только в первой строке каждого входного файла):

 find -type f -iname "*.txt" -exec awk ' FNR==1 {out=FILENAME; sub(/\.[^.]*$/, "-new&", out) || out = out "-new"} {print $1, $2 >out} ' {} +