Linux下如何清理管道分隔文件第9字段中的多余管道符
修复管道分隔文件第9字段含非法分隔符的问题
针对你遇到的管道分隔文件中第9字段(EVNT_MSSG)因用户输入含管道符导致格式错乱的问题,可通过以下awk脚本实现仅清除该字段内的管道符、保留其他字段原样的需求:
BEGIN { FS="|"; OFS="|" } { # 输出前8个原始字段,保持原有分隔符 for (i=1; i<=8; i++) { printf "%s%s", $i, (i==8 ? "" : OFS) } # 将第9字段及后续被错误分割的内容拼接为完整的用户输入 user_msg = "" for (i=9; i<=NF; i++) { user_msg = user_msg $i } # 清除用户输入中的所有管道符 gsub(/\|/, "", user_msg) # 拼接处理后的第9字段并输出整行 printf "%s%s\n", OFS, user_msg }
脚本说明
- 分隔符设置:BEGIN块统一设置输入(FS)和输出(OFS)分隔符为
|,保证输出格式与原文件一致。 - 前8字段保留:循环打印前8个字段,严格保留原始内容与分隔格式。
- 修复第9字段:将所有从第9个开始的"伪字段"(因用户输入的管道符被错误分割的内容)拼接为完整的用户输入文本,再用
gsub清除其中所有管道符。 - 整行拼接输出:将处理后的第9字段与前8字段拼接,输出修复后的完整行。
该脚本无需修改源系统,直接处理文件即可,且兼容表头行(表头第9字段无非法管道符,处理后内容不变)。
内容的提问来源于stack exchange,提问作者DarrenB
相关产品推荐
相关产品推荐

