我有一个脚本:
+-------------+------+------+------+------+------+
| 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
文本文件csv
和fileA1
,复制fileB1
的前六列并将它们(带替换)粘贴到{的前6列中{1}}。然后输出保存到新文件fileA1
。
现在,我想将此扩展到fileB1
(fileC1
)和folder A
(fileA1...fileAn
)中的n个文件,并将输出保存到文件{{1 (folder B
)。
所有输入文件的行数相同。
我想出了这个
fileB1...fileBn
但它不起作用。有什么想法吗?
答案 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。)