Запустите awk для каждого файла в каталоге, затем сохраните вывод для каждого файла --с тем же именем файла --в другом каталоге

Если предположить

  1. Разделитель — пробел
  2. Вам нужны все, кроме первого столбца,который может быть пустым, но будет иметь разделитель
  3. Между столбцами есть только один разделитель

, затем вы можете использовать cut -d' ' -f2-для печати из файла значений, разделенных пробелом -, содержимого от второго до последнего столбца.

0
18.08.2021, 23:07
3 ответа

Ничего особенного, переберите файлы и добавьте префикс имени выходного каталога к имени файла.

outputdir=bar
mkdir -p "$outputdir"
for f in./*.txt; do
    awk -f script.awk < "$f" > "$outputdir/$f"
done

Это предполагает, что входные файлы находятся в текущем каталоге, и outputdirотносится к этому. Итак, если у вас есть foo/и bar/на одном уровне, вам нужно cd fooи установить outputdir=../bar.


Если это не так, нам нужно удалить имя входного каталога из $f. Здесь работает префикс -, удаляющий расширение ${var#pattern}:

.
outputdir=./bar
inputdir=./foo
mkdir -p "$outputdir"
for f in "$inputdir"/*.txt; do
    awk -f script.awk < "$f" > "$outputdir/${f#"$inputdir"}"
done

Или вы можете использовать что-то вроде "$outputdir/$(basename -- "$f")", если вы более знакомы с этим. (Будьте осторожны с кавычками, если у вас -некрасивые имена каталогов.)

2
20.08.2021, 10:24

С помощью GNU awk для редактирования «на месте»:

cp -r foo bar &&
awk -i inplace 'script' bar/*
3
20.08.2021, 10:24

Для полноты картины: если вы управляете скриптом, вы можете обрабатывать его там, например.

 awk -vout=../bar/ '$2=="cow" {print "moo",$3,$1 > out FILENAME; next} $4!="fox" {print > out FILENAME}' *

Но это, как правило, будет хлопотно, и лично я бы выбрал другие ответы. Как отмечает Эд , с другими awk, отличными от GNU, вам, вероятно, потребуется отделить -vи заключить в скобки >(out FILENAME), которые довольно незначительны, и изменить на >>и добавить close(out FILENAME)вызовы, которые я считаю еще хуже хлопот:-(

0
20.08.2021, 10:24

Теги

Похожие вопросы