如何将 cat(UNIX)命令单独应用于文件夹中的所有文件?

如何将 cat(UNIX)命令单独应用于文件夹中的所有文件?

情况如下:

我的文件 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"

相关内容