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