Szukam sposobu w unixie, aby podzielić plik na dwa pliki pod danym numerem linii.
split -l 100 file_name
jest zbliżony do tego, czego szukam, ale to polecenie tworzy wiele plików, każdy po 100 wierszy. Szukam polecenia, aby podzielić plik na dwa pliki pod danym numerem wiersza. Czy jest na to sposób w Unixie?
wc
wcześniej, a plik wejściowy jest przetwarzany tylko raz, podobnie jak w przypadkuawk
rozwiązania.head
przeczyta więcej niż 100 linii w celu znalezienia pierwszych 100 linii do wysłaniaf1.txt
; te dodatkowe bajty nie będą widoczne przezcat
.Użyj
awk
, aby wykonać tylko jedno przejście przez plik wejściowy. Poniżej założono, że chcesz pierwsze 122 wiersze w pierwszym pliku, a pozostałe w drugim.źródło
Możesz użyć
head
i,tail
aby uzyskać obie części:gdzie
K
jest numerem linii iL
jest liczbą linii od dołu (całkowita liczba linii -K
).(możesz uzyskać łączną liczbę linii za pomocą
wc -l file_name
).źródło
Możesz to zrobić
csplit
(jeśli jest dostępne):podzieli plik na dwie części, jedną do numeru linii (włącznie)
N
i drugą od numeru liniiN+1
do ostatniej linii.Jeśli chcesz podzielić numer linii (ale nie w tym)
N
:źródło
csplit
jest zoptymalizowany do tego zadania.Zarówno
head
itail
mają opcje do linii produktów z „innej” koniec pliku, niż byłoby inaczej. Masz więc dwie opcje:lub (gdzie NNN jest o 100 mniejszy niż wynik
wc -l source.txt
):Możesz przeczytać strony podręcznika dla swoich wersji
head
itail
uzyskać więcej informacji.źródło
Możesz użyć „wc”, „dc”, „head” i „tail”. To znaczy
Aby ułatwić obsługę, możesz zmienić powyższy skrypt w skrypt powłoki.
źródło