如何在脚本中递归地应用粘贴命令
How to apply paste command recursively in a script
我有一个脚本:
paste -d, <(cut fileA1 -d, -f1-6) <(cut fileB1 -d, -f7) > fileC1
需要两个 csv
文本文件 fileA1
和 fileB1
,复制 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。)
我有一个脚本:
paste -d, <(cut fileA1 -d, -f1-6) <(cut fileB1 -d, -f7) > fileC1
需要两个 csv
文本文件 fileA1
和 fileB1
,复制 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。)