使用AWK的OFS处理多空格分隔文件的问题
AWK处理多空格分隔文件首行字段换行方案
针对你的需求,直接用以下AWK命令就能实现首行每个字段单独换行且无空行的效果:
BEGIN { FS = " {2,}" # 以两个及以上空格作为字段分隔符 OFS = "\n" # 设置输出字段分隔符为换行符 } NR == 1 { # 过滤首行中的空字段 non_empty = 0 for (i = 1; i <= NF; i++) { if ($i != "") { $(++non_empty) = $i } } NF = non_empty # 更新字段数量为非空字段数 print # 打印时自动用OFS分隔每个字段,即每行一个字段 exit # 仅处理首行,后续行忽略 }
问题原因说明
- 空行产生的原因:用
-F' {2,}'时,若行首存在空格、或字段间有过多连续空格,会分割出空字段。如果直接打印,空字段会通过输出分隔符(默认空格)输出,当你设置OFS为换行时,空字段就会变成空行。 - OFS不生效的原因:AWK只有在字段被修改(比如重新赋值字段)或
NF被更新时,才会用OFS重新拼接输出内容。之前仅设置OFS但未触发字段重排,所以原内容不会改变。
效果验证
假设file1.csv首行内容为:
user_id username email phone
运行命令后输出结果:
user_id username email phone
内容的提问来源于stack exchange,提问作者HattrickNZ
相关产品推荐
相关产品推荐

