Ini mungkin berhasil untuk Anda (GNU dan non-GNU sed):
sed -n 'p;n' file # keep odd
sed -n 'n;p' file # keep even
-n
:menekan pencetakan
p
:cetak baris saat ini
n
:baris berikutnya
Menggunakan GNU sed:
sed -i '0~2d' filename
untuk menghapus baris bernomor genap dari file.
Untuk menghapus baris bernomor ganjil:
sed -i '1~2d' filename
-i
opsi akan menyebabkan perubahan disimpan ke file di tempat.
Mengutip dari manual:
`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'.
aduh
%
adalah operator modulus dan NR
adalah nomor baris saat ini, jadi NR%2==0
benar hanya untuk garis genap dan akan menjalankan aturan default untuknya ({ print $0 }
). Jadi untuk hanya menyimpan garis genap , alihkan output dari awk
ke file baru:
awk 'NR%2==0' infile > outfile
sed
Anda dapat melakukan hal yang sama dengan sed
. devnulls jawaban menunjukkan bagaimana melakukannya dengan GNU sed
.Di bawah ini adalah alternatif untuk versi sed
yang tidak memiliki ~
operator:
pertahankan garis ganjil
sed 'n; d' infile > outfile
pertahankan garis genap
sed '1d; n; d' infile > outfile