如何补全制表符分隔文件:向下复制分类标识至对应条目
把分类前置的特殊格式文本转成全量制表符分隔文件
原始输入格式
这份文本中,分类行用|包裹,条目行以^开头:
|01BFRUITS| ^banana ^apple ^orange ^pear |01AELECTRONICS| ^television ^radio ^dishwasher ^computer |01AANIMAL| ^bear ^cat ^dog ^elephant |01ASHAPE| ^circle ^square ^diamond ^star
第一步:用sed预处理
先清理分类行的首尾竖线,把条目行的^替换成制表符,得到中间结果:
sed -e 's/^|//; s/|$//' -e 's/^\^/\t/' input.txt
输出:
01BFRUITS banana apple orange pear 01AELECTRONICS television radio dishwasher computer 01AANIMAL bear cat dog elephant 01ASHAPE circle square diamond star
第二步:用awk补全分类
此时条目行的分类字段为空,需要用awk自动补全上一行的分类。一开始直接输出会丢失制表符,必须显式设置OFS='\t'(输出字段分隔符)来保留格式:
awk -F'\t' -v OFS='\t' '{ if ($1 != "") { category = $1 } else { $1 = category } print }'
组合命令一步到位
把sed和awk用管道串联,直接生成目标制表符分隔文件:
sed -e 's/^|//; s/|$//' -e 's/^\^/\t/' input.txt | awk -F'\t' -v OFS='\t' '{if ($1 != "") category=$1; else $1=category; print}' > output.tsv
最终输出(制表符分隔)
01BFRUITS banana 01BFRUITS apple 01BFRUITS orange 01BFRUITS pear 01AELECTRONICS television 01AELECTRONICS radio 01AELECTRONICS dishwasher 01AELECTRONICS computer 01AANIMAL bear 01AANIMAL cat 01AANIMAL dog 01AANIMAL elephant 01ASHAPE circle 01ASHAPE square 01ASHAPE diamond 01ASHAPE star
内容的提问来源于stack exchange,提问作者vicscul
相关产品推荐
相关产品推荐

