2012-02-13 14 views
10

Mam problem próbuję rozwiązać bez powodzenia. Muszę skopiować część pliku .txt z linii n do linii n + y (powiedzmy 1000 do 1000000). Ten plik jest bardzo duży, więc nie mogę tego zrobić ręcznie, więc próbuję użyć terminala, aby to zrobić, bez powodzenia. Teraz próbowałem z operatorami i sed, bez powodzenia. Oto kopia co starałem:Skopiuj/Wklej część pliku do innego pliku przy użyciu Terminal (lub powłoki)

sed -n "1000, 1000000p" ścieżka/pierwszego/file> ścieżka/II/pliku

Każda pomoc jest naprawdę doceniane;)

+1

Nie ma nic złego w sed polecenia dajesz na przykład; w jaki sposób zawodzi? –

+0

Jeśli plik wejściowy zawiera niepoprawne zakończenia linii, należy najpierw dokonać konwersji. Spróbuj 'dos2unix'. – tripleee

Odpowiedz

19

jeśli wiesz, ile wierszy znajduje się w twoim pliku źródłowym (wc-l), możesz to zrobić .. załóż 12000 linii i potrzebujesz linii 2000 - 7000 w nowym pliku (w sumie 5000 linii).

cat myfile | ogon -10000 | head -5000> newfile

Przeczytaj ostatnie 10k wierszy, a następnie przeczytaj pierwsze 5k wierszy od tego.

+0

Nie musisz wiedzieć, ile wierszy znajduje się w pliku: po prostu umieść głowę w pierwszej kolejności. – jfg956

+0

A jeśli chcesz najpierw umieścić ogon, możesz użyć 'tail -n + 2000'. Zajmuje to również mniej przestrzeni buforowej. – jfg956

+1

Bling, bezużyteczne użycie kota. Poza tym oryginalne polecenie 'sed' było w porządku. – tripleee

1

Właściwie Twój sed polecenie powinno działać tylko zastąpić cudzysłowów z apostrofami

Powiązane problemy