首页 > 解决方案 > 使用 awk 将空白值替换为先前的非空白第一列值(值分隔列)

问题描述

我有两列逗号分隔的文件,其中第一列始终为空,第二列有时为空(当最后一列为空时,没有最后的逗号):

,value_c1_1
,,value_c2_1
,,value_c2_2
,,value_c2_3
,value_c1_2

我想使用 awk 用以前的非空列值填充空列值,然后删除第二列为空的行:

,value_c1_1,value_c2_1
,value_c1_1,value_c2_2
,value_c1_1,value_c2_3

与这个问题的答案有很大的不同

awk '/^ /{$0=(x)substr($0,length(x)+1)}{x=$1}1' file

是字段是字符分隔的(而不是固定长度),并且第一列始终为空。

标签: awk

解决方案


awk -F, 'BEGIN { OFS = FS } { if ($2 == "") $2 = last2; else last2 = $2; print }'

如果第 2 列为空,则将其替换为保存的值;否则,请保存第 2 列中的值以供将来使用。打印该行。(该BEGIN块确保输出字段分隔符OFS与(输入)字段分隔符相同FS。)

如果您只想打印具有 3 个字段的行,则:

awk -F, 'BEGIN { OFS = FS }
         { if ($2 == "") $2 = last2; else last2 = $2; if (NF == 3) print }'

推荐阅读