将bash脚本输出重定向到文件夹

时间:2018-09-13 17:10:35

标签: bash file

我有两个目录,将从中两个文件中提取特定的列并将其保存到新文件中:

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_filesb_files的行数相同,但它们存在于不同的文件夹中。

1 个答案:

答案 0 :(得分:2)

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")"' --