如何不借助第三方包将单列带Sample分组的数据转换为多列格式
无额外依赖的格式转换解决方案
这里直接用系统默认自带的awk工具实现,不需要安装任何第三方包,适配所有类Unix系统、WSL、Windows PowerShell环境。
执行命令
将你的原始文本保存为input.txt后,直接运行以下命令即可输出目标格式内容:
awk ' # 匹配Sample行,初始化新列 /^Sample/ { col_idx++ row_idx = 1 headers[col_idx] = $0 next } # 跳过空行,存储数据 !/^Sample/ && NF > 0 { data[col_idx][row_idx] = $0 max_row = row_idx > max_row ? row_idx : max_row row_idx++ } # 处理完所有行后输出结果 END { # 输出表头 for (i=1; i<=col_idx; i++) printf "%-12s", headers[i] print "" # 逐行输出各列数据 for (r=1; r<=max_row; r++) { for (i=1; i<=col_idx; i++) printf "%-12s", data[i][r] print "" } }' input.txt
说明
- 代码中
%-12s用于控制每列的左对齐宽度为12个字符,你可以根据实际内容长度调整这个数值 - 自动跳过原始文本中的空行,容错性更高
- 支持任意数量的Sample分组,也支持每个分组下行数不同的场景
样例输出
针对你提供的测试输入,运行命令后输出效果如下:
Sample 1 Sample 2 Sample 3 1 4 7 2 5 8 3 6 9
内容的提问来源于stack exchange,提问作者mark1245
相关产品推荐
相关产品推荐

