GNU/Linux >> Belajar Linux >  >> Linux

Pertahankan Hanya Baris Pertama Dari Setiap Urutan Garis Berturut-turut yang Cocok dengan Pola?

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 berisi logical IO , jika ditemukan dan variabel seen salah yaitu baris sebelumnya tidak mengandung logical IO , lalu cetak baris, setel seen=1 dan lanjutkan ke baris berikutnya jika tidak, lanjutkan ke baris berikutnya karena baris sebelumnya memiliki logical IO

  • Untuk baris lainnya, {print; seen=0} , mencetak baris dan set seen=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

Linux
  1. Hapus Beberapa Baris Pertama Secara Efisien Dari File Teks?

  2. Ganti Garis yang Mencocokkan Pola Dengan Garis Dari File Lain Secara Berurutan?

  3. Temukan Hanya Kejadian Pertama Menggunakan Only Grep?

  1. Bagaimana Cara Mengambil Hanya Jalur yang Dibutuhkan Dari Output Terminal?

  2. Bagaimana cara membagi file dan menyimpan baris pertama di setiap bagian?

  3. Menghilangkan baris pertama dari keluaran perintah Linux mana pun

  1. sed untuk memasukkan hanya pada pertandingan pertama

  2. dapatkan 5 karakter pertama dari setiap baris dalam skrip Shell

  3. Bagaimana saya bisa mendapatkan kata-kata di antara dua contoh teks/pola pertama?