2012-06-10 56 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 

,直到有沒有留下更多的文本文件,你可以把它放進一個循環。

相關問題