使用awk对字段进行排序和排列
发布时间:2020-12-13 23:56:21 所属栏目:Linux 来源:网络整理
导读:我正在尝试学习awk,我想做一个特定的任务.我的问题范围与先前发布的问题类似( Using awk to transpose column to row),但对我的数据不太适用.我一直试图弄清楚为什么,我确定它很简单. 我在制表符分隔表中有大量数据,只有两个字段(如下所示): 1101t77781101
我正在尝试学习awk,我想做一个特定的任务.我的问题范围与先前发布的问题类似(
Using awk to transpose column to row),但对我的数据不太适用.我一直试图弄清楚为什么,我确定它很简单.
我在制表符分隔表中有大量数据,只有两个字段(如下所示): 1101t7778 1101t7755 1101t8889 1101t6789 2300t1220 4000t2333 4000t7555 4000t9000 4000t1111 当字段匹配时,我想最终将第二个字段附加到行上.期望的输出是: 1101t7778t7755t8889t6789 2300t1220 4000t2333t7555t9000t1111 如果可能的话,我喜欢对命令中的所有部分进行解释,以便我将来能够理解它.提前致谢. 解决方法awk ' { list[$1] = list[$1] "t" $2 } END { for (i in list) printf "%s%sn",i,list[i] }' data 第一行添加一个选项卡,第二个字段添加到$1索引的list元素.第二行打印出键和累积的值列表. 样本输出: 1101 7778 7755 8889 6789 4000 2333 7555 9000 1111 2300 1220 如果要对第一列进行排序,可以通过sort -n管道输出.如果你有GNU awk,你也可以调查内置的排序函数: /usr/gnu/bin/awk ' { list[$1] = list[$1] "t" $2 } END { n = asorti(list,indexes); for (i = 1; i <= n; i++) printf "%s%sn",indexes[i],list[indexes[i]] }' data 排序输出: 1101 7778 7755 8889 6789 2300 1220 4000 2333 7555 9000 1111 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |