免费注册 查看新帖 |

Chinaunix

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

[请教] awk 去除重复数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-28 21:43 |只看该作者 |倒序浏览
现在有下面这样的数据:
  1. 1_2        data1_dg        xp24k0_0002
  2. 1_2        c5t12d0        xp24k0_0060
  3. 1_2        c5t6d1        xp24k0_0031
  4. 1_2        c6t1d7        xp24k0_008f
  5. 1_2        c6t7d6        xp24k0_00be
  6. 5_2        data1_dg        xp24k0_0003
  7. 5_2        c5t12d1        xp24k0_0061
  8. 5_2        c5t6d2        xp24k0_0032
  9. 5_2        c6t2d0        xp24k0_0090
  10. 5_2        c6t7d7        xp24k0_00bf
  11. 1_3        data1_dg        xp24k0_0004
  12. 1_3        c5t12d2        xp24k0_0062
  13. 1_3        c5t6d3        xp24k0_0033
  14. 1_3        c6t2d1        xp24k0_0091
  15. 1_3        c6t8d0        xp24k0_00c0
复制代码
处理完后希望能得到下面这样的5份结果:
第一份:
1_2        c5t12d0        xp24k0_0060
5_2        data1_dg        xp24k0_0003
1_3        data1_dg        xp24k0_0004
第二份:
1_2        c5t6d1        xp24k0_0031
5_2        c5t12d1        xp24k0_0061
1_3        c5t12d2        xp24k0_0062
以次类推
先谢谢各位!

论坛徽章:
0
2 [报告]
发表于 2010-06-28 21:52 |只看该作者
第一份中的1_2        c5t12d0        xp24k0_0060为什么不是1_2        data1_dg        xp24k0_0002?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
3 [报告]
发表于 2010-06-28 21:58 |只看该作者
看不出规律,第五份应该是啥?

论坛徽章:
0
4 [报告]
发表于 2010-06-28 22:09 |只看该作者
八成楼主看错行了

论坛徽章:
0
5 [报告]
发表于 2010-06-28 22:09 |只看该作者
本帖最后由 zibingsu 于 2010-06-28 22:41 编辑
1_1 11
1_1 12
1_1 13
2_1 21
2_1 22
2_1 23
3_1 31
3_1 32
3_1 33

我把数据简化了一下,取了第1列三个不同的值来说明一下。
第一列有3个不一样的值,分别是1_1,1_2,3_2,然后每个值有3个匹配的行。我需要把3个值匹配到的行分成3个结果如下:
第一份:
1_1        11
2_1        21
3_1        31
第二份:
1_1        12
2_1        22
3_1        32
第三份:
1_1        13
2_1        23
3_1        33

论坛徽章:
0
6 [报告]
发表于 2010-06-28 23:30 |只看该作者
  1. awk 'BEGIN{prv=0}{if(prv==0||$1 != prv) {cnt=1;print $0>>"file"cnt;} else {cnt++;print $0 >>"file"cnt}prv=$1}' file
复制代码
生成的file1是楼主你的第一份 file2是第二份 以此类推。。。。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
7 [报告]
发表于 2010-06-28 23:35 |只看该作者

  1. awk '{print $0 >> NR%3".txt"}' urfile
复制代码

论坛徽章:
0
8 [报告]
发表于 2010-06-29 00:40 |只看该作者
楼上2位给的awk语句全部报语法错误,我把我的实际数据贴出来,实际数据第一列的值相同的行数不是完全相同。
这是我awk的版本,可能比较老。
awk --version
awk version 20070501
  1. 1_1 xp24k0_002f
  2. 1_1 xp24k0_005e
  3. 1_1 xp24k0_008d
  4. 1_1 xp24k0_00bc
  5. 1_10 xp24k0_0012
  6. 1_10 xp24k0_0041
  7. 1_10 xp24k0_0070
  8. 1_10 xp24k0_009f
  9. 1_10 xp24k0_00ce
  10. 1_11 xp24k0_0014
  11. 1_11 xp24k0_0043
  12. 1_11 xp24k0_0072
  13. 1_11 xp24k0_00a1
  14. 1_11 xp24k0_00d0
  15. 1_12 xp24k0_0016
  16. 1_12 xp24k0_0045
  17. 1_12 xp24k0_0074
  18. 1_12 xp24k0_00a3
  19. 1_12 xp24k0_00d2
  20. 1_13 xp24k0_0018
  21. 1_13 xp24k0_0047
  22. 1_13 xp24k0_0076
  23. 1_13 xp24k0_00a5
  24. 1_13 xp24k0_00d4
  25. 1_14 xp24k0_001a
  26. 1_14 xp24k0_0049
  27. 1_14 xp24k0_0078
  28. 1_14 xp24k0_00a7
  29. 1_14 xp24k0_00d6
  30. 1_15 xp24k0_001c
  31. 1_15 xp24k0_004b
  32. 1_15 xp24k0_007a
  33. 1_15 xp24k0_00a9
  34. 1_15 xp24k0_00d8
  35. 1_2 xp24k0_0002
  36. 1_2 xp24k0_0031
  37. 1_2 xp24k0_0060
  38. 1_2 xp24k0_008f
  39. 1_2 xp24k0_00be
  40. 1_3 xp24k0_0004
  41. 1_3 xp24k0_0033
  42. 1_3 xp24k0_0062
  43. 1_3 xp24k0_0091
  44. 1_3 xp24k0_00c0
  45. 1_4 xp24k0_0006
  46. 1_4 xp24k0_0035
  47. 1_4 xp24k0_0064
  48. 1_4 xp24k0_0093
  49. 1_4 xp24k0_00c2
  50. 1_5 xp24k0_0008
  51. 1_5 xp24k0_0037
  52. 1_5 xp24k0_0066
  53. 1_5 xp24k0_0095
  54. 1_5 xp24k0_00c4
  55. 1_6 xp24k0_000a
  56. 1_6 xp24k0_0039
  57. 1_6 xp24k0_0068
  58. 1_6 xp24k0_0097
  59. 1_6 xp24k0_00c6
  60. 1_7 xp24k0_000c
  61. 1_7 xp24k0_003b
  62. 1_7 xp24k0_006a
  63. 1_7 xp24k0_0099
  64. 1_7 xp24k0_00c8
  65. 1_8 xp24k0_000e
  66. 1_8 xp24k0_003d
  67. 1_8 xp24k0_006c
  68. 1_8 xp24k0_009b
  69. 1_8 xp24k0_00ca
  70. 1_9 xp24k0_0010
  71. 1_9 xp24k0_003f
  72. 1_9 xp24k0_006e
  73. 1_9 xp24k0_009d
  74. 1_9 xp24k0_00cc
  75. 3_1 xp24k0_001e
  76. 3_1 xp24k0_004d
  77. 3_1 xp24k0_007c
  78. 3_1 xp24k0_00ab
  79. 3_10 xp24k0_0028
  80. 3_10 xp24k0_0057
  81. 3_10 xp24k0_0086
  82. 3_10 xp24k0_00b5
  83. 3_11 xp24k0_0029
  84. 3_11 xp24k0_0058
  85. 3_11 xp24k0_0087
  86. 3_11 xp24k0_00b6
  87. 3_12 xp24k0_002a
  88. 3_12 xp24k0_0059
  89. 3_12 xp24k0_0088
  90. 3_12 xp24k0_00b7
  91. 3_13 xp24k0_002b
  92. 3_13 xp24k0_005a
  93. 3_13 xp24k0_0089
  94. 3_13 xp24k0_00b8
  95. 3_14 xp24k0_002c
  96. 3_14 xp24k0_005b
  97. 3_14 xp24k0_008a
  98. 3_14 xp24k0_00b9
  99. 3_15 xp24k0_002d
  100. 3_15 xp24k0_005c
  101. 3_15 xp24k0_008b
  102. 3_15 xp24k0_00ba
  103. 3_16 xp24k0_002e
  104. 3_16 xp24k0_005d
  105. 3_16 xp24k0_008c
  106. 3_16 xp24k0_00bb
  107. 3_2 xp24k0_0020
  108. 3_2 xp24k0_004f
  109. 3_2 xp24k0_007e
  110. 3_2 xp24k0_00ad
  111. 3_3 xp24k0_0021
  112. 3_3 xp24k0_0050
  113. 3_3 xp24k0_007f
  114. 3_3 xp24k0_00ae
  115. 3_4 xp24k0_0022
  116. 3_4 xp24k0_0051
  117. 3_4 xp24k0_0080
  118. 3_4 xp24k0_00af
  119. 3_5 xp24k0_0023
  120. 3_5 xp24k0_0052
  121. 3_5 xp24k0_0081
  122. 3_5 xp24k0_00b0
  123. 3_6 xp24k0_0024
  124. 3_6 xp24k0_0053
  125. 3_6 xp24k0_0082
  126. 3_6 xp24k0_00b1
  127. 3_7 xp24k0_0025
  128. 3_7 xp24k0_0054
  129. 3_7 xp24k0_0083
  130. 3_7 xp24k0_00b2
  131. 3_8 xp24k0_0026
  132. 3_8 xp24k0_0055
  133. 3_8 xp24k0_0084
  134. 3_8 xp24k0_00b3
  135. 3_9 xp24k0_0027
  136. 3_9 xp24k0_0056
  137. 3_9 xp24k0_0085
  138. 3_9 xp24k0_00b4
  139. 5_1 xp24k0_0001
  140. 5_1 xp24k0_0030
  141. 5_1 xp24k0_005f
  142. 5_1 xp24k0_008e
  143. 5_10 xp24k0_0013
  144. 5_10 xp24k0_0042
  145. 5_10 xp24k0_0071
  146. 5_10 xp24k0_00cf
  147. 5_11 xp24k0_0015
  148. 5_11 xp24k0_0044
  149. 5_11 xp24k0_0073
  150. 5_11 xp24k0_00a2
  151. 5_11 xp24k0_00d1
  152. 5_12 xp24k0_0017
  153. 5_12 xp24k0_0046
  154. 5_12 xp24k0_0075
  155. 5_12 xp24k0_00a4
  156. 5_12 xp24k0_00d3
  157. 5_13 xp24k0_0019
  158. 5_13 xp24k0_0048
  159. 5_13 xp24k0_0077
  160. 5_13 xp24k0_00a6
  161. 5_13 xp24k0_00d5
  162. 5_14 xp24k0_001b
  163. 5_14 xp24k0_004a
  164. 5_14 xp24k0_0079
  165. 5_14 xp24k0_00a8
  166. 5_14 xp24k0_00d7
  167. 5_15 xp24k0_001d
  168. 5_15 xp24k0_004c
  169. 5_15 xp24k0_007b
  170. 5_15 xp24k0_00d9
  171. 5_16 xp24k0_001f
  172. 5_16 xp24k0_004e
  173. 5_16 xp24k0_007d
  174. 5_16 xp24k0_00ac
  175. 5_2 xp24k0_0003
  176. 5_2 xp24k0_0032
  177. 5_2 xp24k0_0061
  178. 5_2 xp24k0_0090
  179. 5_2 xp24k0_00bf
  180. 5_3 xp24k0_0005
  181. 5_3 xp24k0_0034
  182. 5_3 xp24k0_0063
  183. 5_3 xp24k0_0092
  184. 5_3 xp24k0_00c1
  185. 5_4 xp24k0_0007
  186. 5_4 xp24k0_0036
  187. 5_4 xp24k0_0065
  188. 5_4 xp24k0_0094
  189. 5_4 xp24k0_00c3
  190. 5_5 xp24k0_0009
  191. 5_5 xp24k0_0038
  192. 5_5 xp24k0_0067
  193. 5_5 xp24k0_0096
  194. 5_5 xp24k0_00c5
  195. 5_6 xp24k0_000b
  196. 5_6 xp24k0_003a
  197. 5_6 xp24k0_0069
  198. 5_6 xp24k0_0098
  199. 5_6 xp24k0_00c7
  200. 5_7 xp24k0_000d
  201. 5_7 xp24k0_003c
  202. 5_7 xp24k0_006b
  203. 5_7 xp24k0_009a
  204. 5_7 xp24k0_00c9
  205. 5_8 xp24k0_000f
  206. 5_8 xp24k0_003e
  207. 5_8 xp24k0_006d
  208. 5_8 xp24k0_009c
  209. 5_8 xp24k0_00cb
  210. 5_9 xp24k0_0011
  211. 5_9 xp24k0_0040
  212. 5_9 xp24k0_006f
  213. 5_9 xp24k0_009e
  214. 5_9 xp24k0_00cd
复制代码
目前我试用了以下步骤解决了这个问题,但是还是想知道awk怎么一步解决这个问题。
我的步骤如下:
1.试用awk取出不重复的单行记录。
awk '!($1 in a){a[$1];print}' t.ls >d.ls
2. 试用comm把挑出来的行去除。
comm -23 t.ls d.ls >t1.ls
3.再次取出不重复的单行记录。
awk '!($1 in a){a[$1];print}' t1.ls >d1.ls
重复上面步骤4次,由于第一列值相同的行最少有4行,所以取出4行就够了。

再次感谢大家!

论坛徽章:
0
9 [报告]
发表于 2010-06-29 09:08 |只看该作者
回复 8# zibingsu


楼主,1_1的少贴了一行吧?

论坛徽章:
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
10 [报告]
发表于 2010-06-29 09:47 |只看该作者
7楼的代码是正确的,楼主还折腾啥?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP