Dies könnte für Sie funktionieren (sowohl GNU- als auch Nicht-GNU-Sed):
sed -n 'p;n' file # keep odd
sed -n 'n;p' file # keep even
-n
:Drucken unterdrücken
p
:aktuelle Zeile drucken
n
:nächste Zeile
Mit GNU sed:
sed -i '0~2d' filename
um die geradzahligen Zeilen aus der Datei zu entfernen.
Zum Entfernen ungeradzahliger Zeilen:
sed -i '1~2d' filename
Die -i
würde bewirken, dass die Änderungen direkt in der Datei gespeichert werden.
Zitat aus dem Handbuch:
`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
Die %
ist ein Modulo-Operator und NR
ist die aktuelle Zeilennummer, also NR%2==0
ist nur für gerade Zeilen wahr und ruft die Standardregel für sie auf ({ print $0 }
). Also um nur die geraden Zeilen zu speichern , leiten Sie die Ausgabe von awk
um in eine neue Datei:
awk 'NR%2==0' infile > outfile
gesendet
Das Gleiche können Sie mit sed
erreichen . devnulls Antwort zeigt, wie man es mit GNU sed
macht .Unten sind Alternativen für Versionen von sed
die nicht den ~
haben Betreiber:
ungerade Zeilen beibehalten
sed 'n; d' infile > outfile
Gleiche Linien beibehalten
sed '1d; n; d' infile > outfile