如何将带相同前缀的单列schema.table数据转为多列多行制表符分隔格式?
解决方法
可以用awk命令快速处理这类按组列对齐的需求,以下是具体实现:
假设你的输入文件名为input.txt,要输出到output.txt,执行以下命令:
awk -F'.' '{ # 记录schema首次出现的顺序 if (!seen[$1]++) schemas[++schema_cnt] = $1 # 把每个schema下的表按顺序存入二维数组 arr[$1][++cnt[$1]] = $0 # 记录拥有最多表的schema的表数量 if (cnt[$1] > max_len) max_len = cnt[$1] } END { # 按行遍历,拼接每个schema的对应位置表名 for (i=1; i<=max_len; i++) { line = "" for (j=1; j<=schema_cnt; j++) { s = schemas[j] if (line != "") line = line "\t" # 存在对应表则添加,否则留空 line = line (arr[s][i] ? arr[s][i] : "") } print line } }' input.txt > output.txt
命令逻辑说明:
- 以
.为分隔符拆分每行的schema和表名 - 用数组
schemas记录输入中schema首次出现的顺序,避免输出列顺序混乱 - 二维数组
arr[schema][序号]存储每个schema下的第N个表 - 循环遍历到最长的表数量,逐行拼接每个schema的对应表项,用制表符分隔
- 没有对应表项的位置会留空,保证列对齐
执行后,output.txt就是你需要的制表符分隔格式文件。
内容的提问来源于stack exchange,提问作者rose
相关产品推荐
相关产品推荐

