使用awk将空白值替换为先前的非空白第一列值(值分隔的列)

时间:2018-06-19 13:47:56

标签: 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

the answer to this question

的巨大区别
awk '/^ /{$0=(x)substr($0,length(x)+1)}{x=$1}1' file

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

1 个答案:

答案 0 :(得分:2)

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 }'