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

时间:2017-02-14 14:49:26

标签: bash shell paste

我有一个脚本:

+-------------+------+------+------+------+------+
|     Col     | Col1 | Col2 | Col3 | Col4 | Col5 |
+-------------+------+------+------+------+------+
| A_B_C_D_E_F | A    | B    | C    | D    | E    |
+-------------+------+------+------+------+------+

需要两个paste -d, <(cut fileA1 -d, -f1-6) <(cut fileB1 -d, -f7) > fileC1 文本文件csvfileA1,复制fileB1的前六列并将它们(带替换)粘贴到{的前6列中{1}}。然后输出保存到新文件fileA1

现在,我想将此扩展到fileB1fileC1)和folder AfileA1...fileAn)中的n个文件,并将输出保存到文件{{1 (folder B)。 所有输入文件的行数相同。

我想出了这个

fileB1...fileBn

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

1 个答案:

答案 0 :(得分:2)

您需要一个显式循环。您似乎没有使用find无法在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。)