Bash如何按#和/分割文本为制表符分隔列并补全Unknown
你当前出现空白的原因是:拆分#后内容时,如果没有/,对应的第二字段为空,没有做默认值填充。你可以直接用单条awk命令一步完成需求,无需生成多个临时文件:
awk -F '[#/]' 'BEGIN{OFS="\t"} { if(NF == 2) { print $1, "Unknown", "Unknown" } else { print $1, $2, $3 } }' te-hierarchy.txt
命令逻辑说明:
- 输入分隔符
FS设置为[#/],同时识别#和/作为拆分标记,一次性完成全部字段拆分 - 内置变量
NF为当前行拆分后的字段总数:- 当
NF=2时,说明#后没有/,直接给后两列填充Unknown - 当
NF=3时,说明#后存在/,直接输出拆分后的三个字段即可
- 当
BEGIN{OFS="\t"}指定输出分隔符为制表符,符合输出格式要求
如果你想调整原有多步临时文件的方案,只需要在拆分order.txt和family.txt时补充空值判断即可:
# 拆分得到order.txt,空值填充Unknown cat types.txt | awk -F '/' '{print $1==""?"Unknown":$1}' > order.txt # 拆分得到family.txt,空值填充Unknown cat types.txt | awk -F '/' '{print $2==""?"Unknown":$2}' > family.txt
内容的提问来源于stack exchange,提问作者R-MASHup
相关产品推荐
相关产品推荐

