免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4685 | 回复: 8
打印 上一主题 下一主题

[文本处理] AWK如何控制输出统计值的时候保持字段间的分隔符和原先一样? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-24 17:04 |只看该作者 |倒序浏览
awk -F"   " '{a[$1,$2,$3]++}END{for (j in a) print j,a[j]}'  aaaa>>bbbbb

原文件aaaa中的内容为tab键分隔字段
13800003988        46220000003988        2633000003988
13800003990        46220000003990        2633000003990
13800003991        46220000003991        2633000003991
13800003991        46220000003991        2633000003991
13800003992        46220000003992        2633000003992
13800003992        46220000003992        2633000003992
13800003992        46220000003992        2633000003992
13800003993        46220000003993        2633000003993
13800003993        46220000003993        2633000003993
13800003993        46220000003993        2633000003993
13800003993        46220000003993        2633000003993
13800003994        46220000003994        2633000003994
13800003994        46220000003994        2633000003994
但是输出统计值后

13800002371     46220000002371  2633000002371^\^\ 2
13800003036     46220000003036  2633000003036^\^\ 7
13800005147     46220000005147  2633000005147^\^\ 8
13800004482     46220000004482  2633000004482^\^\ 3
13800005105     46220000005105  2633000005105^\^\ 6
13800004440     46220000004440  2633000004440^\^\ 1
13800000658     46220000000658  2633000000658^\^\ 9
13800000616     46220000000616  2633000000616^\^\ 7
13800002748     46220000002748  2633000002748^\^\ 9

有什么办法保持后面统计值与前面的一样用tab分隔?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-02-25 06:20:00
2 [报告]
发表于 2013-09-24 17:08 |只看该作者
本帖最后由 xiaoshichao143 于 2013-09-24 17:19 编辑

回复 1# houen

   不知道你是不是要统计相同的行的行数
  1. awk 'BEGIN{OFS="\t"}{a[$0]++}END{for (j in a) print j,a[j]}'  aaaa >>bbbb
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2013-09-24 17:08 |只看该作者
回复 1# houen

OFS="\t"
   

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
4 [报告]
发表于 2013-09-24 17:30 |只看该作者
OFS = FS

论坛徽章:
0
5 [报告]
发表于 2013-09-24 17:57 |只看该作者
回复 2# xiaoshichao143
是的,统计前三个字段相同的行数,这个好像没有效果,最后一列 重复行数与前面的之间分隔还不是tab

13800005001     46220000005001  2633000005001^\^\ 2

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2013-09-24 18:20 |只看该作者
回复 5# houen

would you like this ...
Note: There is no "\t" (Tab key) in your file

# awk '{a[$0]++}END{for(n in a)print n"      "a[n]}' aaa
13800003988        46220000003988        2633000003988      1
13800003992        46220000003992        2633000003992      3
13800003991        46220000003991        2633000003991      2
13800003990        46220000003990        2633000003990      1
13800003994        46220000003994        2633000003994      2
13800003993        46220000003993        2633000003993      4


   

论坛徽章:
0
7 [报告]
发表于 2013-09-24 18:50 |只看该作者
多谢各位了,是我在使用awk -F"" '{a[$1,$2,$3]++}END{for (j in a) print j"        "a[j]}'
$1,$2,$3之间使用了逗号 换成a[$1"   "$2"   "$3] 就没有问题了

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
8 [报告]
发表于 2013-09-25 06:05 |只看该作者
houen 发表于 2013-09-24 20:50
多谢各位了,是我在使用awk -F"" '{a[$1,$2,$3]++}END{for (j in a) print j"        "a[j]}'
$1,$2,$3之间使用了 ...


如果是统计全行的,用$0 就可以了,这个会保留间隔符的。
  1. awk '{a[$0]++}END{for (i in a) print i, a[i]}' OFS="\t\t" infile
复制代码

论坛徽章:
0
9 [报告]
发表于 2013-09-25 13:44 |只看该作者
回复 8# rdcwayx

多谢大师指导
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP