/ / Podziel plik dziennika zachowując integralność danych za pomocą ogranicznika - linux, bash, shell

Podziel plik dziennika, zachowując integralność danych, używając separatora - linux, bash, shell

Mam ogromny plik dziennika, który można podzielić na pliki o wielkości około 1 MB każdy. mogę użyć split polecenie, ale złamałbym wpis dziennika o połowę lub nawet pracę, którą mógłbym podzielić w środku linii.

Jak podzielić taki plik za pomocą prostego i eleganckiego polecenia? (złożony skrypt nie byłby rozwiązaniem).

W poniższym przypadku podział zostanie wykonany tuż po tokenie "===="

====
Log entry 1 line 1
Log entry 1 line 2
Log entry 1 line 3
====
Log entry 2 line 1
Log entry 2 line n
====

Odpowiedzi:

3 dla odpowiedzi № 1

Polecenie csplit może być użyte do podziału na podstawie wzorca.

Na przykład,

csplit -f PREFIX -n 2 large_file "/====/" "{*}"

To podzieliłoby plik na "===="

Nazwy wygenerowanych plików jako PREFIX01, PREFIX02

{*} określa podział na tyle razy, ile wzór pojawia się w pliku wejściowym.

Istnieją inne opcje, aby precyzyjnie dostroić sposób generowania plików wyjściowych. Możesz wstawić liczbę całkowitą po / ==== /, aby określić, czy dokładnie podzielić token, przed czy po.