使用 Cygwin 合并多个子目录中的 CSV 文件
Merge CSV files in multiple sub directories using Cygwin
我是 Cygwin 的新手,确实需要一些帮助。我有一个包含多个子目录的根目录(所有子目录都在同一级别,即没有 sub-sub 目录等)。每个子目录包含几个 CSV 文件(相同格式,无 headers)。我想将每个子目录中的 CSV 合并到每个子目录的一个大 CSV 文件中。也就是说,每个子目录一个 CSV,包含该子目录中所有 CSV 的内容。
我想我可以使用简单的命令 cat *.csv > largefile.csv
,但我不太确定如何扫描所有子目录并将此代码应用于每个子目录。根据我学习过的教程,我相信这应该可行:
for dir in `find . -type d`
do cat *.csv > largefile.csv
done
这是最好的方法吗?好像太简单了。
此外,有没有办法将这些命令存储在一个文件中,以便在我需要执行此任务时执行?
在此先感谢您帮助这位初学者!
我会通过创建这个文件来做到这一点:
cat_all_csv_dir.sh:
#!/bin/bash
for dir in *; do
# continue if it is not a directory or if it does not contain any csv
if [ ! -d "$dir" ] || [ -z "$(ls "$dir"/*.csv 2>/dev/null)" ]; then
continue;
fi
cat "$dir"/*.csv > "$dir".csv
echo $dir
done
您应该在一个文件夹中创建它,该文件夹存在于 PATH
环境变量中。
它的值可以通过输入 echo $PATH
命令来打印。
通过这种方式,cat_all_csv_dir.sh
可以是来自任何目录的 运行。
我是 Cygwin 的新手,确实需要一些帮助。我有一个包含多个子目录的根目录(所有子目录都在同一级别,即没有 sub-sub 目录等)。每个子目录包含几个 CSV 文件(相同格式,无 headers)。我想将每个子目录中的 CSV 合并到每个子目录的一个大 CSV 文件中。也就是说,每个子目录一个 CSV,包含该子目录中所有 CSV 的内容。
我想我可以使用简单的命令 cat *.csv > largefile.csv
,但我不太确定如何扫描所有子目录并将此代码应用于每个子目录。根据我学习过的教程,我相信这应该可行:
for dir in `find . -type d`
do cat *.csv > largefile.csv
done
这是最好的方法吗?好像太简单了。
此外,有没有办法将这些命令存储在一个文件中,以便在我需要执行此任务时执行?
在此先感谢您帮助这位初学者!
我会通过创建这个文件来做到这一点:
cat_all_csv_dir.sh:
#!/bin/bash
for dir in *; do
# continue if it is not a directory or if it does not contain any csv
if [ ! -d "$dir" ] || [ -z "$(ls "$dir"/*.csv 2>/dev/null)" ]; then
continue;
fi
cat "$dir"/*.csv > "$dir".csv
echo $dir
done
您应该在一个文件夹中创建它,该文件夹存在于 PATH
环境变量中。
它的值可以通过输入 echo $PATH
命令来打印。
通过这种方式,cat_all_csv_dir.sh
可以是来自任何目录的 运行。