Bash: обработка всех файлов в каталоге - PullRequest
0 голосов
/ 29 апреля 2020

Как бы я применил логи c ко всем файлам в каталоге и передал окончательный вывод каждого входного файла в отдельный файл? Что-то вроде ниже

cut -d, -f2 input1.csv | awk 'END{print NR}' > input1_count.csv

(фактическая команда длинная, но я использовал выше для простоты, чтобы лучше понять логи c для всех файлов в каталоге)

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

Вы можете использовать for -l oop над именами файлов:

shopt -s nullglob # enable nullglob
for f in *.csv; do
   cut -d, -f2 "$f" | awk 'END{print NR}' > "${f%.csv}_count.csv"
done
shopt -u nullglob # disable nullglob

Шаблон глобуса *.csv расширяется до пустой строки с включенным nullglob (вместо литерала и возможно несуществующее имя файла *.csv). В l oop примените конвейер команд к каждому имени файла и перенаправьте вывод на новое имя файла.

Расширение параметра ${f%.csv} удаляет шаблон с самым коротким суффиксом .csv из имени файла.

1 голос
/ 29 апреля 2020

Простой for l oop должен выполнить эту работу:

for f in *.csv; do
   cut -d, -f2 "$f" | awk 'END{print NR}' > "${f/%.csv/_count.csv}"
done

Предполагается, что в текущем каталоге присутствуют .csv файлы. Если файлы могут не существовать, используйте любой из этих shopt выше for l oop:

shopt -s failglob    # return error when glob matching fails

или

shopt -s nullglob    # be silent when glob matching fails
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...