Warianty tego pytania z pewnością zadawano kilka razy w różnych miejscach, ale staram się usunąć ostatnie M
wiersze z pliku bez powodzenia.
Drugi najbardziej głosowało odpowiedź na to pytanie zaleca wykonanie następujących czynności, aby pozbyć się ostatniej linii w pliku:
head -n -1 foo.txt > temp.txt
Jednak gdy próbuję tego w OSX i Zsh, otrzymuję:
head: illegal line count -- -1
Dlaczego? Jak mogę usunąć M
ostatnie wiersze i przez pierwsze N
linie danego pliku?
head --version
? Z jakiego systemu korzystasz?head --version
faktycznie zwraca błąd.Odpowiedzi:
Możesz usunąć pierwsze 12 linii za pomocą:
(Oznacza to wydruk z 13. linii).
Niektóre implementacje
head
podobnejhead
obsługi GNU :ale to nie jest standard.
działałby na tych systemach, które mają
tail -r
(patrz także GNUtac
), ale nie są optymalne.Gdzie
n
jest 1:Możesz także:
aby usunąć 2 linie, ale to nie jest optymalne.
Możesz to zrobić:
Ale uwaga: niektóre implementacje nie będą działać z dużymi wartościami n
sed
.Z
awk
:Aby usunąć
m
linie od początku in
od końca:źródło
sed 'x;1d;$d'
może być również użyty do uzyskania dwóch ostatnich linii. I kilkaN
sekund później1d
można by użyć, aby uzyskać trochę więcej, chociaż w tym momencie nie oferuje żadnej przewagi nadN;P;D
pętlą, którą już polecasz.m
albon
są0
. W przeciwnym razie byłoby idealnie.Możesz użyć następującego sposobu, aby usunąć pierwsze N linii i ostatnie M. linii.
Z
N=5
,M=7
a pliktest.txt
:Polecenie drukuje wszystkie linie od N + 1 do LastLine-M.
Inną opcją jest użycie Pythona:
źródło
Możesz usunąć ostatnie
M
(tutaj M = 100) wiersze z pliku za pomocą:źródło