Chcę podzielić plik dziennika o długości 400 tys. Wierszy z określonego numeru wiersza.
W przypadku tego pytania zróbmy to dowolną liczbę 300k.
Czy istnieje polecenie systemu Linux, które pozwala mi to zrobić ( w skrypcie )?
Wiem, że split
pozwala mi podzielić plik na równe części według rozmiaru lub numerów linii, ale nie tego chcę. Chcę, aby pierwsze 300 KB w jednym pliku i ostatnie 100 KB w drugim pliku.
Każda pomoc będzie mile widziana. Dzięki!
Po zastanowieniu byłoby to bardziej odpowiednie dla witryny superużytkownika lub witryny z błędem serwera.
linux
shell
split
filesplitting
denormalizer
źródło
źródło
Odpowiedzi:
file_name=test.log # set first K lines: K=1000 # line count (N): N=$(wc -l < $file_name) # length of the bottom file: L=$(( $N - $K )) # create the top of file: head -n $K $file_name > top_$file_name # create bottom of file: tail -n $L $file_name > bottom_$file_name
Ponadto, po zastanowieniu się, podział będzie działał w twoim przypadku, ponieważ pierwszy podział jest większy niż drugi. Split umieszcza równowagę wejścia w ostatnim splicie, więc
split -l 300000 file_name
wyświetli
xaa
300 tys. linii ixab
100 tys. linii, dla wejścia zawierającego 400 tys. linii.źródło
tail -n +L file_name > bottom_file
tam, gdzie po prostuL=K+1
nie trzeba biegaćwc
pierwszysed -n '1,1000p' test.log > top_test.log ; sed '1,1000d' test.log > bottom_test.log
. IHMO, jest to prostsze i nie wymaga obliczania całkowitej liczby linii. Ponadto nadal działa, jeśli między wykonaniem każdego polecenia zostały dołączone wiersze.