情况如下:
我的文件 A.csv 需要与文件夹中的所有其他 *.csv 单独连接,并且每个输出都需要与特定的 *.csv 具有相同的名称。
我如何在终端上执行此操作?我必须执行此操作 50 次,并且其他 csv 没有有序的命名约定,因此手动输入很麻烦。
数据很敏感,所以我不能随便检查 cat A.csv *csv >*.csv 是否有效。(我猜它不会)
答案1
在 中使用 for 循环bash
。你可以先做一个无害的测试:
#!/bin/bash
for f in *.csv; do
if [ "$f" != 'A.csv' ]; then
echo cat A.csv "$f" \> "$f.new"
fi
done
这使得你可以看到将要执行的内容但实际上并未执行它。
请注意,我已将输出文件命名为$f.new
。您无法保证cat
在 shell 开始覆盖文件之前会执行。因此我建议您这样做,或者最好将文件写入另一个目录:
mkdir combined
for f in *.csv; do
if [ "$f" != 'A.csv' ]; then
echo cat A.csv $f \> "combined/$f"
fi
done
当然,一旦您满意,就删除回声(和转义>
字符):
cat A.csv "$f" > "combined/$f"