Toto by vám mohlo fungovat (jak GNU, tak sed bez GNU):
sed -n 'p;n' file # keep odd
sed -n 'n;p' file # keep even
-n
:potlačit tisk
p
:tisk aktuálního řádku
n
:další řádek
Použití GNU sed:
sed -i '0~2d' filename
pro odstranění sudých řádků ze souboru.
Pro odstranění lichých řádků:
sed -i '1~2d' filename
-i
volba by způsobila uložení změn do souboru na místě.
Citace z manuálu:
`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'.
awk
%
je modulový operátor a NR
je aktuální číslo řádku, tedy NR%2==0
platí pouze pro sudé řádky a vyvolá pro ně výchozí pravidlo ({ print $0 }
). Tedy uložit pouze sudé řádky , přesměrujte výstup z awk
do nového souboru:
awk 'NR%2==0' infile > outfile
sed
Totéž můžete provést pomocí sed
. devnulls odpověď ukazuje, jak to udělat s GNU sed
.Níže jsou alternativy pro verze sed
které nemají ~
operátor:
nechat liché řádky
sed 'n; d' infile > outfile
zachovat sudé řádky
sed '1d; n; d' infile > outfile