2012-06-10 31 views
0

我在目录中有大量的小文本文件。我想将每100个文件合并成一个大文件。任何人都可以用Linux Shell脚本帮助我做到这一点吗?如何将每个100个文件合并到一个目录中?

+0

帮助:是的。写:不。 [当你为自己尝试时,你有哪个部分卡住了?](http://whathaveyoutried.com/)?分组100个文件?连接文件?写脚本? – Johnsyweb

回答

0

追加输出new.txt

cat *.txt >> new.txt 

覆盖new.txt

cat *.txt > new.txt 
+0

我会假设OP会希望在答案的某个地方看到数字“100”...... – Mehrdad

2

下面的草图将做到这一点:

files=(*)         # list of files 
idx=0          # start index of actual package 
len=100          # files per package 
pcount=0         # package counter 

while [ $idx -le ${#files[@]} ] ; do 
    cat "${files[@]:idx:len}" > pack${pcount} # process subarray 
    ((idx+=len))        # start of next package 
    ((pcount++))        # number of next package 
done 

结果是文件名为“pack0 ','pack1',...

+0

只需使用“files =(*)” - 这将保留带有空格的文件名。使用'ls'这样会将带有空格的文件名分解成单独的单词。 –

+0

谢谢,没错。另外,cat命令需要用引号来处理带有空格的文件名。 –

+0

它很好用..非常感谢。我只需要更改为“文件=(文件夹/ *)”,并将结果放入另一个文件夹。 – user594382

0

如果文件可以(重新)移动,那么它相当简单:

find text_files_dir/ -name '*.txt' | \ 
head -n 100 | \ 
while read f; do cat "$f" >> big_file && rm "$f"; done 

find text_files_dir/ -name '*.txt' | \ 
head -n 100 | \ 
while read f; do cat "$f" >> big_file && mv "$f" some_place_else/; done 

,直到有没有留下更多的文本文件,你可以把它放进一个循环。

相关问题