使用awk对字段进行排序和排列

使用awk对字段进行排序和排列,第1张

概述我正在尝试学习awk,我想做一个特定的任务.我的问题范围与先前发布的问题类似( Using awk to transpose column to row),但对我的数据不太适用.我一直试图弄清楚为什么,我确定它很简单. 我在制表符分隔表中有大量数据,只有两个字段(如下所示): 1101\t77781101\t77551101\t88891101\t67892300\t12204000\t 我正在尝试学习awk,我想做一个特定的任务.我的问题范围与先前发布的问题类似( Using awk to transpose column to row),但对我的数据不太适用.我一直试图弄清楚为什么,我确定它很简单.

我在制表符分隔表中有大量数据,只有两个字段(如下所示):

1101\t77781101\t77551101\t88891101\t67892300\t12204000\t23334000\t75554000\t90004000\t1111

当字段匹配时,我想最终将第二个字段附加到行上.期望的输出是:

1101\t7778\t7755\t8889\t67892300\t12204000\t2333\t7555\t9000\t1111

如果可能的话,我喜欢对命令中的所有部分进行解释,以便我将来能够理解它.提前致谢.

解决方法
awk '    { List[] = List[] "\t"  }     END { for (i in List) printf "%s%s\n",i,List[i] }' data

第一行添加一个选项卡,第二个字段添加到$1索引的List元素.第二行打印出键和累积的值列表.

样本输出:

1101    7778    7755    8889    67894000    2333    7555    9000    11112300    1220

如果要对第一列进行排序,可以通过sort -n管道输出.如果你有GNU awk,你也可以调查内置的排序函数:

/usr/gnu/bin/awk '    { List[] = List[] "\t"  }                  END { n = asorti(List,indexes);                        for (i = 1; i <= n; i++)                            printf "%s%s\n",indexes[i],List[indexes[i]]                      }' data

排序输出:

1101    7778    7755    8889    67892300    12204000    2333    7555    9000    1111
总结

以上是内存溢出为你收集整理的使用awk对字段进行排序和排列全部内容,希望文章能够帮你解决使用awk对字段进行排序和排列所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1021458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存