如何在脚本中递归地应用粘贴命令

How to apply paste command recursively in a script

我有一个脚本:

paste -d, <(cut fileA1 -d, -f1-6) <(cut fileB1 -d, -f7) > fileC1

需要两个 csv 文本文件 fileA1fileB1,复制 fileA1 的前六列并将它们(替换)粘贴到前 6 列fileB1 个。然后将输出保存到新文件 fileC1.

现在,我想将其扩展到 folder A (fileA1...fileAn) 和 folder B (fileB1...fileBn) 中的 n 个文件,并将输出保存到文件 folder C (fileC1...fileCn)。 所有输入文件的行数相同。

我想到了这个

fileA1=find /path/to/folderA -name '.csv'
fileB1=find /path/to/folderB -name '.csv' 

paste -d, <(cut fileA1 -d, -f1-6) <(cut fileB1 -d, -f7) > *.csv 

但它不起作用。有什么想法吗?

您需要一个显式循环。看起来你没有使用 find 的任何无法完成 in-shell 的功能,所以我将跳过它。

a_files=( /path/to/folderA/*.csv )
b_files=( /path/to/folderB/*.csv )

接下来,我将假设您的文件名使两个数组同步;每个的第一个元素放在一起,等等

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

在这里,我假设输出文件的名称可以这样构造。 (这也意味着您可以对输入文件做同样的事情;这里唯一的变量是 i 迭代的范围 0-n。)