GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan baris ke-n setelah yang ditangkap?

Tidak ada yang salah dengan dua jawaban sebelumnya, tetapi saya pikir saya akan membuat Anda sadar bahwa menemukan baris ketiga setelah sebuah pola dapat dilakukan dalam satu sed panggilan:

sed -n "/four/ { n; n; p }" SourceData.txt

Karena satu program berfungsi, ini lebih efisien daripada menjalankan banyak filter. Perintah di atas menampilkan baris ketiga setelah setiap instance dari "empat", kecuali jika ini terjadi lagi di salah satu dari dua baris setelah kecocokan (solusi lain juga tidak menangani kasus ini dengan cara yang diharapkan); juga, tidak ada keluaran yang dihasilkan jika pola berada di baris terakhir atau kedua dari file, yang mungkin atau mungkin bukan yang Anda inginkan.

Untuk mencocokkan contoh pertama saja:

sed -n "/four/ { n; n; p; q }" SourceData.txt

(Perhatikan bahwa jawaban ini seefisien mungkin, dengan mengakhiri pemindaian segera setelah kecocokan ditemukan.)

Saya menambahkan solusi ini karena sangat berharga untuk mengenal sed dan, meskipun sintaksnya agak tidak tepat (ekspresi reguler sudah cukup buruk!), seringkali bisa sangat berguna. Tutorial ini adalah pengantar yang bagus.


Solusi ini mencetak baris saat ini jika ada kecocokan dua baris yang lalu. Ini sedikit berbeda dari beberapa jawaban lainnya karena tidak akan melewatkan pertandingan lain meskipun terjadi segera setelah pertandingan sebelumnya.

awk -v delay=2 '{for (i=delay; i>=0; i--) t[i]=t[i-1]} /four/ {t[0]="m"} {if (t[delay]) print}'

Setiap kali ada kecocokan, informasi disimpan di t[0] . Dengan setiap baris t array digeser (termasuk menggeser t[-1] ke t[0] untuk mengatur ulang nilai t[0] ). Baris dicetak jika larik menunjukkan ada kecocokan dua baris yang lalu.

Anda dapat dengan mudah menyetel penundaan yang berbeda (mis. delay=7 ) atau gunakan pola lain (mis. /sda[[:digit:]]/ )


Anda dapat menggunakan ungkapan ini (input.txt ):

grep "four" -A 2 input.txt | tail -n 1

Keluarannya adalah:

six 6

grep opsi "-A 2" menyatakan bahwa dua baris setelah baris yang cocok akan ditampilkan.
Dan tail opsi "-n 1" menyatakan bahwa hanya 1 terakhir baris dari hasil ini dikembalikan.


Linux
  1. Diurutkan dengan sort di baris perintah

  2. Bagaimana Cara Mendapatkan Hitungan File Dalam Direktori Menggunakan Baris Perintah?

  3. Bagaimana Menghentikan Perintah Temukan Setelah Pertandingan Pertama?

  1. Bagaimana Cara Mendapatkan Versi Ksh dengan Aman?

  2. Bagaimana Cara Memindahkan Garis Dalam File Teks Ke Atas Atau Ke Bawah Dengan Satu Baris?

  3. Kembalikan Hanya Bagian Dari Garis Setelah Pola Yang Cocok?

  1. Bagaimana Cara Mendapatkan Jumlah Md5 Dari Isi Direktori Sebagai Satu Jumlah?

  2. Cara mendapatkan ukuran file tar.gz dalam (MB) dengan python

  3. Bagaimana cara mendapatkan nama pengguna di Makefile?