Comment supprimer toutes les lignes impaires en utilisant sed?
remove
keep
remove
keep
remove
...
GNU sed a un mode d'adressage approprié:
sed -n '1~2!p' file
ce qui signifie qu'à partir de la ligne 1 et à l'étape 2, imprimez toutes les autres lignes.
De manière équivalente, vous pouvez supprimer le -n
, et supprimez les lignes correspondantes:
sed '1~2d'
Cela peut également être fait en utilisant awk:
awk 'NR%2==0' file
(Chaque fois que le numéro de ligne est un multiple de 2, imprimez la ligne)
Voici le plus court auquel je puisse penser:
sed -n 'g;n;p' file
Il devrait fonctionner avec les versions non GNU de sed
(ainsi que GNU sed
).
Cela fonctionne avec les versions GNU et BSD (mac) de sed:
Pour supprimer les lignes impaires (imprimer les lignes paires):
sed -n ’n;p’ file
Cela peut sembler un peu déroutant, alors voici ce qui se passe sous le capot étape par étape:
Pour supprimer les lignes paires (imprimer les lignes impaires):
sed -n ‘p;n’ file
Voici ce qui se passe sous le capot algorithmiquement:
Solution Perl:
Perl -ne 'print if $. % 2 == 0' file
$.
est le numéro de ligne
Encore un awk:
awk getline file