Cela pourrait fonctionner pour vous (à la fois GNU et non-GNU sed) :
sed -n 'p;n' file # keep odd
sed -n 'n;p' file # keep even
-n
:supprimer l'impression
p
:imprime la ligne courante
n
:ligne suivante
Utilisation de GNU sed :
sed -i '0~2d' filename
pour supprimer les lignes paires du fichier.
Pour supprimer les lignes impaires :
sed -i '1~2d' filename
Le -i
l'option entraînerait l'enregistrement des modifications dans le fichier sur place.
Citation du manuel :
`FIRST~STEP'
This GNU extension matches every STEPth line starting with line
FIRST. In particular, lines will be selected when there exists a
non-negative N such that the current line-number equals FIRST + (N
* STEP). Thus, to select the odd-numbered lines, one would use
`1~2'; to pick every third line starting with the second, `2~3'
would be used; to pick every fifth line starting with the tenth,
use `10~5'; and `50~0' is just an obscure way of saying `50'.
mauvais
Le %
est un opérateur de module et NR
est le numéro de la ligne courante, donc NR%2==0
est vrai uniquement pour les lignes paires et invoquera la règle par défaut pour elles ({ print $0 }
). Ainsi pour enregistrer uniquement les lignes paires , redirige la sortie de awk
vers un nouveau fichier :
awk 'NR%2==0' infile > outfile
sé
Vous pouvez accomplir la même chose avec sed
. devnulls la réponse montre comment le faire avec GNU sed
.Vous trouverez ci-dessous des alternatives pour les versions de sed
qui n'ont pas le ~
opérateur :
garder les lignes impaires
sed 'n; d' infile > outfile
garder les lignes paires
sed '1d; n; d' infile > outfile