Jika 2 atau lebih baris berurutan berisi pola tertentu, hapus semua baris yang cocok dan pertahankan hanya baris pertama.
Dalam contoh di bawah ini ketika 2 atau lebih baris berturut-turut mengandung “logical IO” maka kita perlu menghapus semua baris yang cocok tetapi tetap mempertahankan baris pertama.
Berkas masukan:
select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
testing logical IO 500
handling logical IO 49
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346
testing logical IO 12
Berkas keluaran:
select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346
Jawaban yang Diterima:
Menggunakan awk
:
awk '/logical IO/ {if (!seen) {print; seen=1}; next}; {print; seen=0}' file.txt
-
/logical IO/ {if (!seen) {print; seen=1}; next}
memeriksa apakah baris berisilogical IO
, jika ditemukan dan variabelseen
salah yaitu baris sebelumnya tidak mengandunglogical IO
, lalu cetak baris, setelseen=1
dan lanjutkan ke baris berikutnya jika tidak, lanjutkan ke baris berikutnya karena baris sebelumnya memilikilogical IO
-
Untuk baris lainnya,
{print; seen=0}
, mencetak baris dan setseen=0
Contoh:
$ cat file.txt
select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
testing logical IO 500
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346
parsing logical IO 346
testing logical IO 12
$ awk '/logical IO/ {if (!seen) {print; seen=1}; next}; {print; seen=0}' file.txt
select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346