我有两个目录,将从中两个文件中提取特定的列并将其保存到新文件中:
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
的行数相同,但它们存在于不同的文件夹中。
答案 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")"' --