使用bash shell脚本按数字顺序逐个附加csv文件

时间:2012-11-09 22:39:06

标签: shell

给定名为1.csv,2.csv,3.csv,... 89.csv ... n.csv的文件 如何在bash shell脚本中以数字顺序(1到n)将它们一起追加? 这个解决方案有一个单线程吗?

2 个答案:

答案 0 :(得分:2)

如果您的文件以前导零命名,则更容易,即

  cat [0-9].csv [0-9][0-9].csv .... > new.csv

但鉴于

,获得真正的数字顺序并不难
ls -1
1
10
11
12
13
2
20
21
3
7
8
9

(在两个样本中,请注意ls的选项是第一个,(1),而不是字母L(l))

ls -1 [0-9]* | sort -n
1
2
3
7
8
9
10
11
12
13
20
21

然后

  cat $( ls -1 *.csv | sort -n  ) > new.csv

假设您的所有csv文件都已编号。

如果您有超过1000个文件,shell中的文件arg处理可能会中断,您应该发布一个新问题以正确使用xargs。

要查看发生了什么,请添加shell调试/跟踪使用

 set -vx  # to turn on
 set +vx  # to turn it off

IHTH。

答案 1 :(得分:0)

带内联参数的一个班轮(您应该用最大文件号替换N)。脚本将跳过未显示的文件,因此如果您按顺序错过了几个文件,则不会出现错误:)

for i in `seq 0 N`; do test -f $i.csv && cat $i.csv; done >> result.csv

或使用params的脚本

#!/bin/bash

for i in `seq 0 $1`
do
    if [ -f "$i.csv" ]
    then
        cat $i.csv >> $2
    fi
done

用法:./ script.sh MAX_CSV_ID RESULT_FILE

示例:./ script.sh 89 new.csv