导入具有相同头和类型的所有文件

导入具有相同头和类型的所有文件

我尝试将cat所有具有相同名称的文件放在一个文件中并键入。

例如,cat out1.csv out2.csv out3.csv > out.csv。但我的数据集太大,无法做到这一点;我试过cat out/*.csv > out.csv。它不起作用。

我是 shell 脚本的初学者。有人可以告诉我我错了什么以及如何解决它吗?

答案1

带壳zsh

autoload zargs
zargs -- out<->.csv(n) -- cat > out.csv

将连接名称以 , 开头的所有文件out,后跟任何十进制数字,然后按.csv,按n数字方式排序为out.csv。如果需要,可以通过将命令拆分为多个命令调用来解决zargs可传递给命令的参数数量的限制。

使用bashshell 和 的 GNU 实现xargs,您可以执行类似的操作:

xargs -r0a <(
  shopt -s failglob extglob
  pattern='out+([0123456789]).csv' IFS=
  printf '%s\0' $pattern | sort -zV) cat > out.csv

答案2

for file in out[0-9]*.csv; do
    cat "$file"
done >out.csv

答案3

将 DSU(装饰/排序/取消装饰)习惯用法与任何内置的 Bourne 派生 shell 一起使用printf,并假设您希望以递增的数字顺序打印输入文件:

printf '%s\n' out[0-9]*.csv |
awk -F'[^0-9]+' -v OFS='\t' '{print $2, $0}' |
sort -k1,1n |
cut -f2- |
xargs cat > out.csv

上述内容适用于名称如 OP 显示的名称的文件,这些文件在其他位置不包含空格或数字。

相关内容