我有多個文件,我想要連接cat
。 假設連接文件並在文件之間插入新行
File1.txt
foo
File2.txt
bar
File3.txt
qux
我想Concat的,這樣最終的文件看起來像:
foo
bar
qux
與往常一樣
cat File*.txt > finalfile.txt
foo
bar
qux
什麼是應該做的正確方法
相反的呢?
我有多個文件,我想要連接cat
。 假設連接文件並在文件之間插入新行
File1.txt
foo
File2.txt
bar
File3.txt
qux
我想Concat的,這樣最終的文件看起來像:
foo
bar
qux
與往常一樣
cat File*.txt > finalfile.txt
foo
bar
qux
什麼是應該做的正確方法
相反的呢?
你可以這樣做:
for f in *.txt; do (cat "${f}"; echo) >> finalfile.txt; done
確保文件finalfile.txt
你運行上面的命令之前不存在。
如果你被允許使用awk
你可以這樣做:
awk 'FNR==1{print ""}1' *.txt > finalfile.txt
如果是我做這件事我會使用SED:
sed -e '$s/$/\n/' -s *.txt > finalfile.txt
在這個sed的模式$有兩層含義,首先它僅匹配最後一行數(作爲應用模式的行的範圍),其次它匹配替換模式中行的末尾。
如果你的sed的版本沒有-s
(過程輸入單獨文件),你可以做到這一切作爲一個循環,但:
for f in *.txt ; do sed -e '$s/$/\n/' $f ; done > finalfile.txt
或者在GNU sed中:'sed -s'$ G'* .txt> finalfile.txt' –
只有一個流!這應該是被接受的答案! –
如果你有足夠少的文件,您可以列出每一個,那麼您可以在猛砸使用process substitution,每對文件之間插入新行:
cat File1.txt <(echo) File2.txt <(echo) File3.txt > finalfile.txt
美麗!謝謝。 –
那怎麼我只是做了它在OSX 10.10.3
for f in *.txt; do (cat $f; echo '') >> fullData.txt; done
因爲沒有參數的簡單'echo'命令最後沒有插入新行。
這適用於擊:
for f in *.txt; do cat $f; echo; done
相反的答案與>>
(附加),此命令的輸出可以被管道輸送到其他程序。
實例:
for f in File*.txt; do cat $f; echo; done > finalfile.txt
(for ... done) > finalfile.txt
(括號是可選的)for ... done | less
(管道成更小)for ... done | head -n -1
(這剝掉後空白行)在python中,它與之間的空行連接文件(,
禁止顯示增加一個額外的後空白行):
print '\n'.join(open(f).read() for f in filenames),
這裏是難看蟒單行可以從外殼被調用和輸出打印到文件中:
python -c "from sys import argv; print '\n'.join(open(f).read() for f in argv[1:])," File*.txt > finalfile.txt
你可以這樣做使用xargs
它,如果你喜歡,但主要的想法仍然是相同的:
find *.txt | xargs -I{} sh -c "cat {}; echo ''" > finalfile.txt
的[我怎樣包括我串聯無線文件之間的空行
謝謝。我發現'xargs'比bash中的循環更容易使用。 – RawwrBag
可能重複th「cat」?](http://stackoverflow.com/questions/1653063/how-do-i-include-a-blank-line-between-files-im-concatenating-with-cat) – legoscia