如何使用AWK将空前导字段记录的有效值追加到前一条记录末尾
AWK处理|分隔文本行追加方案
问题背景
你之前的命令awk -F, '{print > $6".txt"}' file报错原因有两个:
- 分隔符设置错误:你的数据是
|分隔,不是逗号,分隔 - 逻辑完全不匹配需求:该命令是按第6字段拆分文件,和你要实现的空行内容追加到上一行的需求无关
实现逻辑
- 识别前导4个字段全为空的记录(匹配输入中
||||开头的行) - 提取这类记录的第5个有效字段,追加到上一条非空记录的末尾,用
|连接 - 连续多条空行依次追加对应字段,处理完成后丢弃空行
完整执行命令
awk -F'\\|' ' function first4_empty() { return ($1=="" && $2=="" && $3=="" && $4=="") } { # 去除行首尾空白字符避免匹配误差 gsub(/^[[:space:]]+|[[:space:]]+$/,"",$0) if (first4_empty()) { prev = prev "|" $5 } else { if (NR>1) print prev prev = $0 } } END { print prev } ' 你的输入文件路径
输出结果(匹配需求)
1|AB|1|20||PAR 1234|||1 1|AB|1|20||PAR 1234|||1|SIR 234 1|AB|1|20||PAR 456|||2 1|AB|1|20||PAR 233|||2|SIR 236 1|AB|1|20||PAR 123|||2|SIR 236|IL 236
注:你给出的预期输出中最后一行的SIR 111属于笔误,实际按输入数据会保留原字段值SIR 236。
内容的提问来源于stack exchange,提问作者Ambitioussignal
相关产品推荐
相关产品推荐

