如何在 bash 脚本中使用 awk 处理多行记录?

Sel*_*mez 17 scripts awk

example.txt 在下面

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
Run Code Online (Sandbox Code Playgroud)

我使用 bash 脚本,假设我想从上面的文件中按名称搜索餐厅。询问用户输入餐厅名称,它应该打印有关该餐厅的信息(5 行)。

awk '/McDonalds/> /KFC/' example.txt
Run Code Online (Sandbox Code Playgroud)

我知道上面的代码行将打印与模式“麦当劳”和“肯德基”匹配的整行,但这只会打印文本文件中的第一行,而不是有关该餐厅的其余信息。我如何告诉它仅从用户输入的餐厅名称中打印所有信息(5 行)?

gle*_*man 15

使用 awk,您可以更改记录分隔符。默认情况下它是一个换行符,所以文件的每一行都是一条记录。如果将RS变量设置为空字符串,awk 将认为记录由空行分隔:

awk -v name="KFC" -v RS="" '$0 ~ "Restaurant: " name' example.txt
Run Code Online (Sandbox Code Playgroud)