2012-01-20 75 views
3

我有一堆.txt文件需要被製作成一個大文件,可以被諸如Microsoft Excel等程序讀取。連接txt文件內容和/或添加中斷到所有

問題是,文件目前在它們的末尾沒有休息,所以它們最終排成一排。

這裏是什麼,我有一個例子(數字代表的行號):

1. | first line of txt file 
2. | second line 

這是我想將其轉換成什麼:

1. | first line of txt file 
2. | second line 
3. | 

我有這些文件的大約3000在一個文件夾中,全部使用相同的格式。有什麼辦法可以將這些文件添加到它們的最後?我想這樣做,而不需要複雜的代碼,即PHP等。我知道你可以使用終端(我在CentOS上)做類似的事情,但如果某件事確實需要我,我錯過了它。

+3

你的格式很混亂 - 你說這是一行,但是然後顯示一個多行的例子。此外,你有沒有嘗試過這樣的正則表達式呢? – Chris

回答

4

實現這一目標的最簡單方法是與環一擊:

for file in *.txt; do 
    echo >> "$file" 
done 

這個迭代覆蓋當前目錄中的所有.txt文件,併爲每個文件附加一個換行符。它可以寫在一行中,你只需要在done之前添加一個;

請注意$file被引用來處理名稱中包含空格和其他有趣字符的文件。

如果文件跨多個目錄傳播,而不是都在同一個,你可以用**/*.txt取代*.txt所有.txt文件遍歷當前文件夾中的所有子目錄。


的另一種方法是使用sed

sed -i "$ s:$:\n:" *.txt 

-i標誌告訴sed就地編輯文件。 $與最後一行匹配,然後s命令用新行(\n)替換該行的末尾(再次爲$),從而在該文件的末尾附加一行。

2

試試這個片斷:

for f in *; do ((cat $f && echo "") > $f.tmp) done && rename -f 's/\.tmp$//' *.tmp 
  • 這基本上採取任何文件的文件夾(for f in *; do)英寸
  • 輸出上STDOUT(cat $f)文件後跟一個換行(echo ""
  • 和輸出入filename.tmp(> $f.tmp)重定向
  • 然後*.tmp文件移動到原始文件(rename -f 's/\.tmp$//' *.tmp)。

編輯: 或者更簡單:

for f in *; do (echo "" >> $f) done 
  • 這基本上採取任何文件的文件夾(for f in *; do)英寸
  • 輸出換行符(echo ""
  • ,並將其添加到文件(>> $f