我有两列的逗号分隔文件,其中第一列始终为空,第二列有时为空(当最后一列为空时,没有最后的逗号):
,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
是字段是字符分隔的(而不是固定长度),并且第一列始终为空。
答案 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 }'