Перенаправление вывода bash-скрипта в папку - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть две директории, из которых я извлекаю определенные столбцы из двух файлов и сохраняю их в новый файл:

shopt -s nullglob
a_files=(/path/to/a_files/*.csv)
b_files=(/path/to/b_files/*.csv)
out_dir=(/path/to/output/folder)

for ((i=0; i<"${#a_files[@]}"; i++)); do
    paste -d, <(cut "${a_files[i]}" -d, -f1-6) \
              <(cut "${b_files[i]}" -d, -f7-) > c_file"$i".csv

done

Код работает, но я хотел бы, чтобы выходные файлы были сохранены ввыходной каталог out_dir и иметь имена файлов a_files

Я пытался использовать >"out_dir/$a_files", но я получаю ошибку «Нет таких файлов или каталогов».

Как перенаправить выходные файлы в каталог?

Я использую Linux Ubuntu.

Обновление: a_files и b_files имеют одинаковое количество строк, ноони существуют в разных папках.

1 Ответ

0 голосов
/ 13 сентября 2018
a_files=(/path/to/files/*.csv)
b_files=(/path/to/files/*.csv)
out_dir="/path/to/output/folder"

# create the output directory
mkdir -p "$out_dir"
for ((i=0; i<"${#a_files[@]}"; i++)); do
    # move the output to "$out_dir" with the filename the same as in ${a_files[i]}
    paste -d, <(cut "${a_files[i]}" -d, -f1-6) <(cut "${b_files[i]}" -d, -f7-) \
      > "$out_dir"/"$(basename "${a_files[i]}")"
done

Но для меня это похоже на работу для xargs, но это только я:

a_path="/path/to/files/*.csv"
b_path="/path/to/files/*.csv"
out_dir="/path/to/output/folder"

join -z <(printf "%s\0" $a_path) <(printf "%s\0" $b_path) | xargs -0 -n2 sh -c 'paste -d, <(cut "$1" -d, -f1-6) <(cut "$2" -d, -f7-) > '"$out_dir"'/"$(basename "$1")"' --
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...