You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Awk匹配的多行记录输出以空行分隔?

问题描述

我参考了处理多行记录的awk示例,现在需要从包含多家餐厅信息的多行记录中筛选出位于Columbus的餐厅。当前用awk命令筛选后,匹配的记录是连在一起的,希望每个匹配的餐厅记录之间用空行分隔,调整FS和ORS参数后仍未解决。

输入数据

Restaurant: Chik-Fil-A 
City: Columbus
State: GA
Address: 123 Biscayne Blvd
Phone: 911

Restaurant: 5 guys
City: Columbus
State: GA
Address: 123 Peachtree Rd
Phone: 911

Restaurant: KFC
City: NYC
State: NY
Address: 123 Madison Square
Phone: 911

Restaurant: Bahama Breeze
City: Orlando
State: FL
Address: 123 Madison Square
Phone: 911

当前使用命令

awk -v name="Columbus" -v RS="" '$0 ~ "City: " name' file.txt

当前输出

Restaurant: Chik-Fil-A 
City: Columbus
State: GA
Address: 123 Biscayne Blvd
Phone: 911
Restaurant: 5 guys
City: Columbus
State: GA
Address: 123 Peachtree Rd
Phone: 911

期望输出

Restaurant: Chik-Fil-A 
City: Columbus
State: GA
Address: 123 Biscayne Blvd
Phone: 911

Restaurant: 5 guys
City: Columbus
State: GA
Address: 123 Peachtree Rd
Phone: 911

解决方案

问题出在设置RS=""时,awk会把空行分隔的内容视为单个记录,但默认的ORS(输出记录分隔符)是单个换行符,导致匹配的记录直接连在一起输出。只需在命令中显式设置ORS="\n\n",让每个匹配的记录输出后添加一个空行即可:

awk -v name="Columbus" -v RS="" -v ORS="\n\n" '$0 ~ "City: " name' file.txt

逻辑说明:

  • RS="":将空行作为记录分隔符,把每家餐厅的信息划分为独立记录
  • ORS="\n\n":设置输出记录分隔符为两个换行,确保匹配的餐厅记录间用空行分隔
  • $0 ~ "City: " name:筛选出包含指定城市的记录并输出

执行后就能得到期望的输出格式。

内容的提问来源于stack exchange,提问作者larryTheLamb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:15:19