4

给定名为 1.csv、2.csv、3.csv、...89.csv... n.csv 的文件,我如何在 bash shell 脚本中按数字顺序将它们附加在一起)(1 到 n)?是否有一个解决方案?

4

2 回答 2

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。

于 2012-11-10T01:38:30.017 回答
0

一个带有内联参数的衬里(您应该用最大文件数替换 N)。脚本将跳过不存在的文件,因此如果您按顺序遗漏了几个文件,您将不会收到错误 :)

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

或带参数的脚本

#!/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

于 2012-11-12T00:11:30.987 回答