Polecenie awk działa dla mnie. Zawsze myślałem, że awk wymaga minimum jednego bloku {...}. dobrze wiedzieć, że nie. Jest to pierwsze nietrywialne polecenie awk, które uruchomiłem!
the_velour_fog
1
@ the_velour_fog blok jest wymagany. jeśli nie napiszesz jednego, AWK zachowa się tak, jakbyś napisał{ print $0 }
shadowtalker
@RKetkaew Której opcji użyłeś? Jeśli odpowiedź rozwiązuje twoje pytanie, kliknij znacznik, aby zaznaczyć je jako odpowiedź.
underscore_d
@underscore_d Cześć, użyłem polecenia sugerowanego przez DarkHeart. Dziękuję za twoje komentarze.
To jest sprytne rozwiązanie. Chciałbym tylko dodać, że wyjaśnienie 2,$jest zakres i v/0$/dna g!komendę. Gdzie 0$jest wyrażenie regularne i dpolecenie ex, które będzie uruchamiane na wszystkich niezgodnych wierszach.
:[range]d
na przykład:3,5d
usuwa wiersze od trzeciego do piątego (włącznie).gsed -n '1p; 0~10p'
Odpowiedzi:
Jeśli masz na myśli, że chcesz zachować co 10 linię i usunąć resztę:
Wyjaśnienie:
%
cały pliknorm
wykonaj następujące polecenia w „trybie normalnym”9dd
usuń 9 liniij
przesuń w dół o jedną linię (tj. zachowaj)Uwaga: usuwa pierwszy wiersz.
Na podstawie http://www.rayninfo.co.uk/vimtips.html
Lub za pomocą polecenia globalnego:
:g/^/+ d9
Na podstawie /programming/1946738/vim-how-to-delete-every-second-row
Lub możesz użyć
awk
:źródło
{...}
. dobrze wiedzieć, że nie. Jest to pierwsze nietrywialne polecenie awk, które uruchomiłem!{ print $0 }
usuwa linie, które nie kończą się
0
od drugiego.źródło
2,$
jest zakres iv/0$/d
nag!
komendę. Gdzie0$
jest wyrażenie regularne id
polecenie ex, które będzie uruchamiane na wszystkich niezgodnych wierszach.