我必须将许多相似的 csv 文件合并到一个文件中。它们存储在许多不同的子目录中,但单个 csv 文件具有相同的名称。
我需要按列附加它们,但我只需要第一个“名称”列一次。所以我想保留第一个 csv 文件的第一列,并将它们从以下所有文件中删除。引用this question我尝试了以下命令:迭代所有子目录,而最终文件位于主目录中(并且在开头是许多 csv 文件之一的副本,因此它已经包含“名称”列):
for i in */; do paste final_table.csv <(cut -f 2- "$i"single_table.csv) > final_table.csv ; done
但是,当输入文件之一也是输出文件时,粘贴似乎不起作用。 我该如何正确解决这个问题?
最佳答案
不要用输出覆盖您正在读取输入的文件。相反,将其 mv/重命名为中间名称,让脚本从该文件读取,并输出到具有原始名称的文件。完成后删除输入文件。
或者,为输出文件选择一个中间名称,将所有输入写入其中,只有在处理完所有输入后,才将输出文件 mv/重命名为最终名称。
作为中间名称,附加一个以“扩展名”结尾的临时文件名可能会很有用。
关于bash - 按列组合多个文件,仅使用第一列一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24608964/