example.txt di bawah ini
Restaurant: McDonalds
City: Miami
State: Florida
Address: 123 Biscayne Blvd
Phone: 911
Restaurant: 5 guys
City: Atlanta
State: Georgia
Address: 123 Peachtree Rd
Phone: 911
Restaurant: KFC
City: NYC
State: NY
Address: 123 Madison Square
Phone: 911
Saya menggunakan skrip bash dan katakanlah saya ingin mencari restoran dengan namanya dari file di atas. Tanyakan input pengguna untuk nama restoran dan harus mencetak informasi mengenai restoran itu (5 baris).
awk '/McDonalds/> /KFC/' example.txt
Saya tahu bahwa baris kode di atas akan mencetak seluruh baris yang cocok dengan pola "McDonalds" dan "KFC" tetapi itu hanya akan mencetak baris pertama dari file teks tetapi bukan sisa informasi tentang restoran itu. Bagaimana saya bisa mengatakannya untuk mencetak semua informasi (5 baris) hanya dari input pengguna nama restoran?
Menggunakan
sed
:Penjelasan
Ini adalah
sed
fungsi dasar , Anda dapat merujuk SCRIP ONE-LINE BERMANFAAT UNTUK SEDsumber
Perintah di atas akan mendapatkan dan mencetak 4 baris berturut-turut bersama dengan baris saat ini karena itu dimasukkan ke dalam for loop. Pola pencarian
$2=="KFC"
akan membantu untuk mendapatkan baris tertentu dari beberapa baris.sumber
Solusi lain yang mungkin:
sumber
{if($1=="KFC")print $0}
dapat terkondensasi hanya$1 == "KFC"
, karena tindakan default untuk kondisi yang benar adalah untuk mencetak catatan.Cukup untuk mencetak dari baris yang berisi nama yang Anda inginkan, ke baris terakhir yang mengandung kata
Phone
(dengan asumsi tentu saja semua entri mengikuti pola yang sama dan akan selalu memilikiPhone
catatan penghentian)Jika kami ingin menyulitkannya sedikit, kami dapat mencetak tepat 5 baris setelah pertandingan, seperti:
The
stop
variabel tidak akan ditetapkan, sehinggaNR<=stop
tidak akan mencetak apa pun, sampai/McDonalds/{stop=NR+5;}
bagian benar-benar menetapkan variabel, dan bahwa hanya akan terjadi ketika kita menemukan pertandingan.sumber