2013-04-29 15 views
8

Mam duży plik tekstowy zawierający 1000 streszczeń z pustą linią pomiędzy poszczególnymi streszczeniami. Chcę podzielić ten plik na 1000 plików tekstowych. Mój plik wyglądaPodział pliku tekstowego na wiele plików

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

mogę zasugerować, aby uniknąć tworzenia się zbyt wiele plików lub katalogów w jednym katalogu. Może zdecydowanie spowolnić wywołania stat (2). Niektóre tysiące to nie jest duży problem, ale może być jakieś dziesięć tysięcy. Oczywiście ten limit zależy od urządzenia (HDD), systemu operacyjnego i systemu plików, z którego korzystasz. – TrueY

+0

możliwy duplikat [Podziel plik .txt na podstawie zawartości] (http://stackoverflow.com/questions/8544684/split-a-txt-file-based-on-content) – tripleee

+0

możliwy duplikat [Podziel jeden plik na wiele plików na podstawie ogranicznika] (http://stackoverflow.com/questions/11313852/split-one-file-into-multiple-files-based-on-delimiter) – Gilles

Odpowiedz

26

Możesz użyć podziału i ustawić "LICZBA wierszy na plik wyjściowy" na 2. Każdy plik będzie miał jeden wiersz tekstu i jeden pusty wiersz.

split -l 2 file 
4

coś takiego:

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

To stworzy 1000 plików nazwa_pliku oznacza liczbę abstrakcyjne. Ten kod awk zapisuje rekordy do pliku, którego nazwa jest pobierana z 1. pola (1 $). Odbywa się to tylko wtedy, gdy liczba pól jest większa niż 0 (NF)

+0

Dzięki za szybką odpowiedź. Działa, ale pokazuje awk: 9276016 tworzy zbyt wiele otwartych plików numer rekordu wejściowego 35, plik pmid.txt numer wiersza źródłowego 1. Próbowałem różnych plików dla każdego pliku, którego błąd jest wyświetlany na tym samym wierszu numer 35. Czy ma on dowolny limit – shalini

+0

Zaktualizowano polecenie zamknięcia pliki odpowiednio. – Guru

+0

Zmierzyłem się z innym problemem. Mój plik ma kilka wierszy zaczynających się od Conclusion lub Results pod liczbą Abstract, w takim przypadku polecenie wspomniało o wygenerowaniu dodatkowego pliku z nazwą Conclusion i Result, którego nie chcę. Proszę mi pomóc – shalini

4

Zawsze można użyć polecenia csplit. To jest rozdzielacz plików, ale oparty na regex.

coś wzdłuż linii:

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

Jest niesprawdzone i mogą potrzebować trochę szczypanie chociaż.

CSPLIT

+0

Wolę to od rozwiązań "awk". Aby podzielić jeden duży plik (format LDIF) z pustymi liniami oddzielającymi porcje, użyłem opcji "powtórzyć wzór" i "ukryć pasującą linię": 'csplit -m -f/tmp/files INPUTFILE '/^\ s * $/'' {*} '' – bovender

+0

Tak, hooray dla csplit. +1. –

Powiązane problemy