awk - awk 数据透视表并在重复列中使用标题行
问题描述
我有一张这样的桌子:
type heart muscle pancreas
A 3 2 2
B 2 2 1
C 6 4 9
并希望使用 awk 将其旋转到:
A heart 3
A muscle 2
A pancreas 2
B heart 2
B muscle 2
B pancreas 1
C heart 6
C muscle 4
C pancreas 9
首先,我想我必须将第一个输入行的字段存储到一个数组中,该数组将用于输出每行的第二个字段。接下来是一个while循环,每行输出相同的第一个字段,直到它到达输入行中字段的末尾。
解决方案
这是一个可扩展的、最小的 POSIX Awk 解决方案:
awk 'NR==1 {split($0, a); next} {for(f=2;f<=NF;f++) print $1, a[f], $f}' file
您可以根据需要使用尽可能多的列和行。
推荐阅读
- python - 为什么在 Visual Studio Code 上运行 Python 3 脚本时会出现 SyntaxError?
- javascript - 使用 JS 从提示中做出选择后出现图片
- ios - JSONDecoder.convertFromSnakeCase 在 iOS 13 中停止工作?
- c# - Any on enums inside Where in Entity Framework Core
- asp.net-core - SignalR .net 核心过滤器
- elasticsearch - 基于条件的 Elasticsearch 总和
- php - IOS无法播放外部视频文件的问题
- c# - ASP.NET Core 3.0 [FromBody] 字符串内容返回“无法将 JSON 值转换为 System.String。”
- c# - 当前使用 C# 并且在循环时遇到问题
- c - c sizeof() 函数是否依赖于主机?