给定名为 1.csv、2.csv、3.csv、...89.csv... n.csv 的文件,我如何在 bash shell 脚本中按数字顺序将它们附加在一起)(1 到 n)?是否有一个解决方案?
问问题
1478 次
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 回答