awk + mencetak baris dari baris pertama hingga kata yang cocok


8

Saya ingin mencetak semua baris dari file sampai kata yang cocok mohon saran bagaimana melakukannya dengan awk

sebagai contoh

Saya ingin mencetak semua baris sampai kata PPP

komentar baris pertama bisa berbeda dari AAA (kata apa saja)

cat file.txt

AAA   ( the first line/word chuld be any word !!!!! )
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
MMM
(((
&&&

jadi saya harus mendapatkan ini

AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

contoh lain (ingin mencetak hingga KJGFGHJ)

 cat file.txt1

 HG
 KJGFGHJ
 KKKK

jadi saya harus mendapatkannya

 HG
 KJGFGHJ

Jawaban:


12

Mencoba:

$ awk '1;/PPP/{exit}' file
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

5
Sama dengan di atas melalui sed:sed '/PPP/q' infile
Costas

@ Costas: Ya, OP inginkan awk, jadi saya tidak memberikan alat lain.
cuonglm

Angka 1 di awal seperti pernyataan lengkap "// {print $ 0}" yang selalu cocok. awk tidak mencetak tanpa itu.
cidermole

@cidermole: Tidak juga. 1seperti {print $0}. Perhatikan juga bahwa itu //adalah pola kosong dan hasilnya tidak ditentukan. Ini bekerja di gawk,, mawkBrian Kernighan versi sendiri tetapi tidak di nawk, oawkdari dada alat pusaka.
cuonglm

Terima kasih atas solusi sed! Saya hanya ingin itu dilakukan dan saya tidak peduli tentang alat
Aaron McMillin

6

Atau gunakan pola rentang yang cocok dengan baris pertama (NR sama dengan 1) hingga pertandingan pertama 'PPP' dalam satu baris

awk 'NR==1,/PPP/' file

jika garis harus sama persis hanya menggunakan 'PPP'

awk 'NR==1,/^PPP$/' file

Jika Anda ingin melakukan hal yang sama untuk setiap file dalam daftar argumen, gunakan variabel FNR yang ulang ke 1 untuk baris pertama dari setiap file yang diproses

awk 'FNR==1,/PPP/' file1 file2 ...

2

Seperti OP mengatakan baris pertama atau kata file dapat berisi kata apa saja (seperti PPPitu sendiri), jadi Anda perlu memeriksa itu dan menilai baris pertama agar tidak cocok dan menghindari awkkeluar dari sana.

Maka Anda dapat mencoba ini:

File input:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
345
PPP
%%%

Perintah:

awk '1;/PPP/{if (NR>1) exit}' file

Keluaran:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.