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 № 1Polecenie 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.