multidimensional-array – AWK中的数据透视表
发布时间:2020-12-14 00:06:05 所属栏目:Linux 来源:网络整理
导读:我需要将元素从数组转换为列索引,并为每个列索引返回$3的值. 我无法访问gawk 4,因此无法使用真正的多维数组. 输入 Name^Code^CountName1^0029^1 Name1^0038^1 Name1^0053^1 Name2^0013^3 Name2^0018^3 Name2^0023^5 Name2^0025^1 Name2^0029^1 Name2^0038^1
我需要将元素从数组转换为列索引,并为每个列索引返回$3的值.
我无法访问gawk 4,因此无法使用真正的多维数组. 输入 Name^Code^Count Name1^0029^1 Name1^0038^1 Name1^0053^1 Name2^0013^3 Name2^0018^3 Name2^0023^5 Name2^0025^1 Name2^0029^1 Name2^0038^1 Name2^0053^1 Name3^0018^1 Name3^0060^1 Name4^0018^2 Name4^0025^5 Name5^0018^2 Name5^0025^1 Name5^0060^1 期望的输出 Name^0013^0018^0023^0025^0029^0038^0053^0060 Name1^^^^^1^1^1^ Name2^3^3^5^1^1^1^1^ Name3^^1^^^^^^1 Name4^^2^^5^^^^ Name5^^^^1^^^^1 有关如何在不使用真正的多维数组的情况下解决此任务的任何建议? 解决方法
以下解决方案使用GNU awk v3.2功能进行排序.这不使用多维数组.它只模拟一个.
awk -F"^" ' NR>1{ map[$1,$2] = $3 name[$1]++ value[$2]++ } END{ printf "Name" n = asorti(value,v_s) for(i=1; i<=n; i++) { printf "%s%s",FS,v_s[i] } print "" m = asorti(name,n_s) for(i=1; i<=m; i++) { printf "%s",n_s[i] for(j=1; j<=n; j++) { printf "%s%s",map[n_s[i],v_s[j]] } print "" } }' file Name^0013^0018^0023^0025^0029^0038^0053^0060 Name1^^^^^1^1^1^ Name2^3^3^5^1^1^1^1^ Name3^^1^^^^^^1 Name4^^2^^5^^^^ Name5^^2^^1^^^^1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- linux – Activator Active Stocks启动应用程序无法使用j
- linux – 来自crontab的ssh返回’tcgetattr:无效的参数’
- linux alloc_pages 接口
- Alpine Linux添加Let‘s Encrypt CA证书或者自签CA证书
- Linux的最佳文件系统,可以处理10000个文件,而不会使系统I /
- Linux / MacOS 下Redis 安装和配置
- 你如何在Linux中检查* .ko内核模块的版本?
- LINUX学习:RHEL7.3 下 NVIDIA显卡驱动安装
- linux – 我可以使用tar将特定文件夹解压缩到另一个文件夹吗
- linux – 将TrueType字形转换为PNG图像?