2013-04-29 116 views
8

我在每個摘要之間都有大文本文件,其中包含1000個帶有空行的摘要。我想將這個文件分成1000個文本文件。 我的文件看起來像將文本文件分割成多個文件

16503654 Three-dimensional structure of neuropeptide k bound to dodecylphosphocholine micelles.  Neuropeptide K (NPK), an N-terminally extended form of neurokinin A (NKA), represents the most potent and longest lasting vasodepressor and cardiomodulatory tachykinin reported thus far. 

16504520 Computer-aided analysis of the interactions of glutamine synthetase with its inhibitors.  Mechanism of inhibition of glutamine synthetase (EC 6.3.1.2; GS) by phosphinothricin and its analogues was studied in some detail using molecular modeling methods. 
+0

我可能會建議,以避免在一個目錄下創建太多的文件或目錄。它肯定會減慢stat(2)調用。一千個不是一個大問題,但有一萬個可以。當然,這個限制取決於您使用的機器(HDD),操作系統和文件系統。 – TrueY 2013-04-29 09:05:27

+0

可能重複[Split a .txt file based on content](http://stackoverflow.com/questions/8544684/split-a-txt-file-based-on-content) – tripleee 2013-06-28 04:35:09

+0

可能的重複[Split one file into多個文件基於分隔符](http://stackoverflow.com/questions/11313852/split-one-file-into-multiple-files-based-on-delimiter) – Gilles 2013-07-02 12:52:13

回答

26

您可以使用拆分並將「每個輸出文件的NUMBER行數」設置爲2.每個文件都有一個文本行和一個空行。

split -l 2 file 
4

事情是這樣的:

awk 'NF{print > $1;close($1);}' file 

這將創建一個文件名作爲抽象的數字1000個文件。這個awk代碼將記錄寫入從第一個字段($ 1)檢索其名稱的文件。只有在字段數大於0的情況下才會執行此操作(NF)

+0

感謝您的快速response.It工作,但它顯示awk: 9276016使得打開的文件太多 輸入記錄編號35,文件pmid.txt 源代碼行號1.我對每個文件嘗試了不同的文件,它在相同行號35處顯示錯誤。是否有任何限制 – shalini 2013-04-29 07:43:02

+0

已更新命令以關閉文件適當。 – Guru 2013-04-29 07:47:19

+0

我面臨另一個問題。我的文件有一些行以摘要中的結論或結果開頭,在這種情況下,您提到的命令生成了一個帶有「結論」和「結果」名稱的額外文件,這是我不想要的。請幫我解決 – shalini 2013-05-10 13:12:29

4

您可以隨時使用csplit命令。這是一個文件分割器,但基於正則表達式。

東西沿着線:

csplit -ks -f /tmp/files INPUTFILENAMEGOESHERE '/^$/' 

這是未經測試,可能需要一些調整,但。

CSPLIT

+0

我更喜歡'awk'解決方案。要用分隔塊的空行分割一個大文件(LDIF格式),我使用'重複模式'和'壓縮匹配行'選項:'csplit -m -f/tmp/files INPUTFILE'/^\ s * $/''{*}'' – bovender 2015-04-16 12:16:26

+0

對於csplit來說,萬歲了。 +1。 – 2015-10-06 23:36:15

相關問題