免费注册 查看新帖 |

Chinaunix

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

[文本处理] 文本按列记录分类处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-31 09:12 |只看该作者 |倒序浏览
我现在有这样文本,本身只有第一列,为了方便处理,我添加了第二列,要求是按照第2列数字每个记录取一行,分批取出来,每次取出的记录第2列记录不能重复,我只会用awk '!a[$2]++'单次来取,请问有办法shell一次完成吗?或者把第一列如果第13和14个字符相同的整成横向排列,这样很非常好处理,非常感谢大家帮忙!
  1. ibm_ds8x000_0006 00
  2. ibm_ds8x000_0007 00
  3. ibm_ds8x000_0008 00
  4. ibm_ds8x000_0009 00
  5. ibm_ds8x000_000a 00
  6. ibm_ds8x000_000b 00
  7. ibm_ds8x000_0106 01
  8. ibm_ds8x000_0107 01
  9. ibm_ds8x000_0108 01
  10. ibm_ds8x000_0109 01
  11. ibm_ds8x000_010a 01
  12. ibm_ds8x000_010b 01
  13. ibm_ds8x000_0206 02
  14. ibm_ds8x000_0207 02
  15. ibm_ds8x000_0208 02
  16. ibm_ds8x000_0209 02
  17. ibm_ds8x000_020a 02
  18. ibm_ds8x000_020b 02
  19. ibm_ds8x000_0306 03
  20. ibm_ds8x000_0307 03
  21. ibm_ds8x000_0308 03
  22. ibm_ds8x000_0309 03
  23. ibm_ds8x000_030a 03
  24. ibm_ds8x000_030b 03
  25. ibm_ds8x000_0406 04
  26. ibm_ds8x000_0407 04
  27. ibm_ds8x000_0408 04
  28. ibm_ds8x000_0409 04
  29. ibm_ds8x000_040a 04
  30. ibm_ds8x000_040b 04
  31. ibm_ds8x000_040c 04
  32. ibm_ds8x000_040d 04
  33. ibm_ds8x000_0506 05
  34. ibm_ds8x000_0507 05
  35. ibm_ds8x000_0508 05
  36. ibm_ds8x000_0509 05
  37. ibm_ds8x000_050a 05
  38. ibm_ds8x000_050b 05
  39. ibm_ds8x000_050c 05
  40. ibm_ds8x000_050d 05
  41. ibm_ds8x000_0606 06
  42. ibm_ds8x000_0607 06
  43. ibm_ds8x000_0608 06
  44. ibm_ds8x000_0609 06
  45. ibm_ds8x000_060a 06
  46. ibm_ds8x000_060b 06
  47. ibm_ds8x000_060c 06
  48. ibm_ds8x000_060d 06
  49. ibm_ds8x000_0706 07
  50. ibm_ds8x000_0707 07
  51. ibm_ds8x000_0708 07
  52. ibm_ds8x000_0709 07
  53. ibm_ds8x000_070a 07
  54. ibm_ds8x000_070b 07
  55. ibm_ds8x000_070c 07
  56. ibm_ds8x000_070d 07
  57. ibm_ds8x000_0806 08
  58. ibm_ds8x000_0807 08
  59. ibm_ds8x000_0808 08
  60. ibm_ds8x000_0809 08
  61. ibm_ds8x000_080a 08
  62. ibm_ds8x000_080b 08
  63. ibm_ds8x000_0906 09
  64. ibm_ds8x000_0907 09
  65. ibm_ds8x000_0908 09
  66. ibm_ds8x000_0909 09
  67. ibm_ds8x000_090a 09
  68. ibm_ds8x000_090b 09
  69. ibm_ds8x000_1006 10
  70. ibm_ds8x000_1007 10
  71. ibm_ds8x000_1008 10
  72. ibm_ds8x000_1009 10
  73. ibm_ds8x000_100a 10
  74. ibm_ds8x000_100b 10
  75. ibm_ds8x000_1106 11
  76. ibm_ds8x000_1107 11
  77. ibm_ds8x000_1108 11
  78. ibm_ds8x000_1109 11
  79. ibm_ds8x000_110a 11
  80. ibm_ds8x000_110b 11
  81. ibm_ds8x000_1206 12
  82. ibm_ds8x000_1207 12
  83. ibm_ds8x000_1208 12
  84. ibm_ds8x000_1209 12
  85. ibm_ds8x000_120a 12
  86. ibm_ds8x000_120b 12
  87. ibm_ds8x000_120c 12
  88. ibm_ds8x000_120d 12
  89. ibm_ds8x000_1306 13
  90. ibm_ds8x000_1307 13
  91. ibm_ds8x000_1308 13
  92. ibm_ds8x000_1309 13
  93. ibm_ds8x000_130a 13
  94. ibm_ds8x000_130b 13
  95. ibm_ds8x000_130c 13
  96. ibm_ds8x000_130d 13
  97. ibm_ds8x000_1406 14
  98. ibm_ds8x000_1407 14
  99. ibm_ds8x000_1408 14
  100. ibm_ds8x000_1409 14
  101. ibm_ds8x000_140a 14
  102. ibm_ds8x000_140b 14
  103. ibm_ds8x000_140c 14
  104. ibm_ds8x000_140d 14
  105. ibm_ds8x000_1506 15
  106. ibm_ds8x000_1507 15
  107. ibm_ds8x000_1508 15
  108. ibm_ds8x000_1509 15
  109. ibm_ds8x000_150a 15
  110. ibm_ds8x000_150b 15
  111. ibm_ds8x000_150c 15
  112. ibm_ds8x000_150d 15
  113. ibm_ds8x000_1606 16
  114. ibm_ds8x000_1607 16
  115. ibm_ds8x000_1608 16
  116. ibm_ds8x000_1609 16
  117. ibm_ds8x000_160a 16
  118. ibm_ds8x000_160b 16
  119. ibm_ds8x000_1706 17
  120. ibm_ds8x000_1707 17
  121. ibm_ds8x000_1708 17
  122. ibm_ds8x000_1709 17
  123. ibm_ds8x000_170a 17
  124. ibm_ds8x000_170b 17
  125. ibm_ds8x000_1806 18
  126. ibm_ds8x000_1807 18
  127. ibm_ds8x000_1808 18
  128. ibm_ds8x000_1809 18
  129. ibm_ds8x000_180a 18
  130. ibm_ds8x000_180b 18
  131. ibm_ds8x000_1906 19
  132. ibm_ds8x000_1907 19
  133. ibm_ds8x000_1908 19
  134. ibm_ds8x000_1909 19
  135. ibm_ds8x000_190a 19
  136. ibm_ds8x000_190b 19
  137. ibm_ds8x000_2006 20
  138. ibm_ds8x000_2007 20
  139. ibm_ds8x000_2008 20
  140. ibm_ds8x000_2009 20
  141. ibm_ds8x000_200a 20
  142. ibm_ds8x000_200b 20
  143. ibm_ds8x000_200c 20
  144. ibm_ds8x000_200d 20
  145. ibm_ds8x000_2106 21
  146. ibm_ds8x000_2107 21
  147. ibm_ds8x000_2108 21
  148. ibm_ds8x000_2109 21
  149. ibm_ds8x000_210a 21
  150. ibm_ds8x000_210b 21
  151. ibm_ds8x000_210c 21
  152. ibm_ds8x000_210d 21
  153. ibm_ds8x000_2206 22
  154. ibm_ds8x000_2207 22
  155. ibm_ds8x000_2208 22
  156. ibm_ds8x000_2209 22
  157. ibm_ds8x000_220a 22
  158. ibm_ds8x000_220b 22
  159. ibm_ds8x000_220c 22
  160. ibm_ds8x000_220d 22
  161. ibm_ds8x000_2306 23
  162. ibm_ds8x000_2307 23
  163. ibm_ds8x000_2308 23
  164. ibm_ds8x000_2309 23
  165. ibm_ds8x000_230a 23
  166. ibm_ds8x000_230b 23
  167. ibm_ds8x000_230c 23
  168. ibm_ds8x000_230d 23
  169. ibm_ds8x000_2406 24
  170. ibm_ds8x000_2407 24
  171. ibm_ds8x000_2408 24
  172. ibm_ds8x000_2409 24
  173. ibm_ds8x000_240a 24
  174. ibm_ds8x000_240b 24
  175. ibm_ds8x000_2506 25
  176. ibm_ds8x000_2507 25
  177. ibm_ds8x000_2508 25
  178. ibm_ds8x000_2509 25
  179. ibm_ds8x000_250a 25
  180. ibm_ds8x000_250b 25
  181. ibm_ds8x000_2606 26
  182. ibm_ds8x000_2607 26
  183. ibm_ds8x000_2608 26
  184. ibm_ds8x000_2609 26
  185. ibm_ds8x000_260a 26
  186. ibm_ds8x000_260b 26
  187. ibm_ds8x000_2706 27
  188. ibm_ds8x000_2707 27
  189. ibm_ds8x000_2708 27
  190. ibm_ds8x000_2709 27
  191. ibm_ds8x000_270a 27
  192. ibm_ds8x000_270b 27
  193. ibm_ds8x000_2806 28
  194. ibm_ds8x000_2807 28
  195. ibm_ds8x000_2808 28
  196. ibm_ds8x000_2809 28
  197. ibm_ds8x000_280a 28
  198. ibm_ds8x000_280b 28
  199. ibm_ds8x000_280c 28
  200. ibm_ds8x000_280d 28
  201. ibm_ds8x000_2906 29
  202. ibm_ds8x000_2907 29
  203. ibm_ds8x000_2908 29
  204. ibm_ds8x000_2909 29
  205. ibm_ds8x000_290a 29
  206. ibm_ds8x000_290b 29
  207. ibm_ds8x000_290c 29
  208. ibm_ds8x000_290d 29
  209. ibm_ds8x000_3006 30
  210. ibm_ds8x000_3007 30
  211. ibm_ds8x000_3008 30
  212. ibm_ds8x000_3009 30
  213. ibm_ds8x000_300a 30
  214. ibm_ds8x000_300b 30
  215. ibm_ds8x000_300c 30
  216. ibm_ds8x000_300d 30
  217. ibm_ds8x000_3106 31
  218. ibm_ds8x000_3107 31
  219. ibm_ds8x000_3108 31
  220. ibm_ds8x000_3109 31
  221. ibm_ds8x000_310a 31
  222. ibm_ds8x000_310b 31
  223. ibm_ds8x000_310c 31
  224. ibm_ds8x000_310d 31
  225. ibm_ds8x000_3206 32
  226. ibm_ds8x000_3207 32
  227. ibm_ds8x000_3208 32
  228. ibm_ds8x000_3209 32
  229. ibm_ds8x000_320a 32
  230. ibm_ds8x000_320b 32
  231. ibm_ds8x000_3306 33
  232. ibm_ds8x000_3307 33
  233. ibm_ds8x000_3308 33
  234. ibm_ds8x000_3309 33
  235. ibm_ds8x000_330a 33
  236. ibm_ds8x000_330b 33
  237. ibm_ds8x000_3406 34
  238. ibm_ds8x000_3407 34
  239. ibm_ds8x000_3408 34
  240. ibm_ds8x000_3409 34
  241. ibm_ds8x000_340a 34
  242. ibm_ds8x000_340b 34
  243. ibm_ds8x000_3506 35
  244. ibm_ds8x000_3507 35
  245. ibm_ds8x000_3508 35
  246. ibm_ds8x000_3509 35
  247. ibm_ds8x000_350a 35
  248. ibm_ds8x000_350b 35
  249. ibm_ds8x000_3606 36
  250. ibm_ds8x000_3607 36
  251. ibm_ds8x000_3608 36
  252. ibm_ds8x000_3609 36
  253. ibm_ds8x000_360a 36
  254. ibm_ds8x000_360b 36
  255. ibm_ds8x000_360c 36
  256. ibm_ds8x000_360d 36
  257. ibm_ds8x000_3706 37
  258. ibm_ds8x000_3707 37
  259. ibm_ds8x000_3708 37
  260. ibm_ds8x000_3709 37
  261. ibm_ds8x000_370a 37
  262. ibm_ds8x000_370b 37
  263. ibm_ds8x000_370c 37
  264. ibm_ds8x000_370d 37
  265. ibm_ds8x000_3806 38
  266. ibm_ds8x000_3807 38
  267. ibm_ds8x000_3808 38
  268. ibm_ds8x000_3809 38
  269. ibm_ds8x000_380a 38
  270. ibm_ds8x000_380b 38
  271. ibm_ds8x000_380c 38
  272. ibm_ds8x000_380d 38
  273. ibm_ds8x000_3906 39
  274. ibm_ds8x000_3907 39
  275. ibm_ds8x000_3908 39
  276. ibm_ds8x000_3909 39
  277. ibm_ds8x000_390a 39
  278. ibm_ds8x000_390b 39
  279. ibm_ds8x000_390c 39
  280. ibm_ds8x000_390d 39
  281. ibm_ds8x000_4006 40
  282. ibm_ds8x000_4007 40
  283. ibm_ds8x000_4008 40
  284. ibm_ds8x000_4009 40
  285. ibm_ds8x000_400a 40
  286. ibm_ds8x000_400b 40
  287. ibm_ds8x000_4105 41
  288. ibm_ds8x000_4106 41
  289. ibm_ds8x000_4107 41
  290. ibm_ds8x000_4108 41
  291. ibm_ds8x000_4109 41
  292. ibm_ds8x000_410a 41
  293. ibm_ds8x000_410b 41
  294. ibm_ds8x000_4205 42
  295. ibm_ds8x000_4206 42
  296. ibm_ds8x000_4207 42
  297. ibm_ds8x000_4208 42
  298. ibm_ds8x000_4209 42
  299. ibm_ds8x000_420a 42
  300. ibm_ds8x000_420b 42
  301. ibm_ds8x000_4305 43
  302. ibm_ds8x000_4306 43
  303. ibm_ds8x000_4307 43
  304. ibm_ds8x000_4308 43
  305. ibm_ds8x000_4309 43
  306. ibm_ds8x000_430a 43
  307. ibm_ds8x000_430b 43
  308. ibm_ds8x000_4405 44
  309. ibm_ds8x000_4406 44
  310. ibm_ds8x000_4407 44
  311. ibm_ds8x000_4408 44
  312. ibm_ds8x000_4409 44
  313. ibm_ds8x000_440a 44
  314. ibm_ds8x000_440b 44
  315. ibm_ds8x000_440c 44
  316. ibm_ds8x000_440d 44
  317. ibm_ds8x000_4505 45
  318. ibm_ds8x000_4506 45
  319. ibm_ds8x000_4507 45
  320. ibm_ds8x000_4508 45
  321. ibm_ds8x000_4509 45
  322. ibm_ds8x000_450a 45
  323. ibm_ds8x000_450b 45
  324. ibm_ds8x000_450c 45
  325. ibm_ds8x000_450d 45
  326. ibm_ds8x000_4605 46
  327. ibm_ds8x000_4606 46
  328. ibm_ds8x000_4607 46
  329. ibm_ds8x000_4608 46
  330. ibm_ds8x000_4609 46
  331. ibm_ds8x000_460a 46
  332. ibm_ds8x000_460b 46
  333. ibm_ds8x000_460c 46
  334. ibm_ds8x000_460d 46
  335. ibm_ds8x000_4705 47
  336. ibm_ds8x000_4706 47
  337. ibm_ds8x000_4707 47
  338. ibm_ds8x000_4708 47
  339. ibm_ds8x000_4709 47
  340. ibm_ds8x000_470a 47
  341. ibm_ds8x000_470b 47
  342. ibm_ds8x000_470c 47
  343. ibm_ds8x000_470d 47
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
2 [报告]
发表于 2012-10-31 09:58 |只看该作者
Try
  1. awk '{a[$2]=a[$2]?a[$2]" "$1:$1}END{for(i in a)print a[i]}' urfile
复制代码

论坛徽章:
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 [报告]
发表于 2012-10-31 10:06 |只看该作者
回复 1# zBS

How about this

$ echo 'ibm_ds8x000_000a
ibm_ds8x000_000b
ibm_ds8x000_0106
ibm_ds8x000_0107' | awk '{id=substr($0,13,2);if(last!=""&&id!=last)print "";printf $0" ";last=id}END{print""}'
ibm_ds8x000_000a ibm_ds8x000_000b
ibm_ds8x000_0106 ibm_ds8x000_0107

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
4 [报告]
发表于 2012-10-31 10:29 |只看该作者
回复 2# yestreenstars

能解释下吗? 着实对awk数组一直都不会用,或者有数组这方面比较好的资料推荐看吗?

   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
5 [报告]
发表于 2012-10-31 10:57 |只看该作者
本帖最后由 yestreenstars 于 2012-10-31 11:03 编辑

回复 4# reyleon
  1. awk '{a[$2]=a[$2]?a[$2]" "$1:$1}END{for(i in a)print a[i]}' urfile
复制代码

以$2为下标建立数组a,如果a[$2]存在就在原a[$2]的后面添加一个空格和$1,然后赋值给a[$2],如果a[$2]不存在,就把$1赋值给a[$2]。我刚接触数组时也不是很能理解,后来通过看很多例子,就慢慢理解了,你可以通过这篇精华理解一下,虽然我还没看过,不过应该不错的。

http://bbs.chinaunix.net/thread-2312439-1-1.html

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
6 [报告]
发表于 2012-10-31 11:04 |只看该作者
回复 5# yestreenstars

谢谢,我再去多学习学习,多练习练习。

   

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-16 06:20:00
7 [报告]
发表于 2012-10-31 11:29 |只看该作者
小弟学shell没多久,所以不会用awk编,跟3楼的思路是一样的,但是速度慢很多,以后果断好好学awk啊。

#!/bin/bash

before=00
for i in $(cat test.txt);do

    now=$(echo $i | cut -c13,14)
    if [ $before == $now ]
    then
        echo -e "$i \c"
        #输出不换行
    else
        echo -e "\n$i \c"
        #换行输出
    fi
    before=$(echo $i | cut -c13,14)
done
echo ""

——————————————————
test.txt里的内容是没有第二列的文本

论坛徽章:
0
8 [报告]
发表于 2012-10-31 11:31 |只看该作者
回复 3# jason680

行了,非常感谢!另外问一下,能实现我前面说的结果吗?就是重新排序。按照13和14个字符不重复的原则。

   

论坛徽章:
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
9 [报告]
发表于 2012-10-31 13:25 |只看该作者
回复 8# zBS

How about this

$ echo 'ibm_ds8x000_0006
ibm_ds8x000_0007
ibm_ds8x000_0108
ibm_ds8x000_0109
ibm_ds8x000_020a
ibm_ds8x000_020b' | awk '{id=substr($0,13,2);if(id!=last){t++;c=0};a[t,++c]=$0;last=id}END{for(n=1;n<=c;n++)for(m=1;m<=t;m++)print a[m,n]}'
ibm_ds8x000_0006
ibm_ds8x000_0108
ibm_ds8x000_020a
ibm_ds8x000_0007
ibm_ds8x000_0109
ibm_ds8x000_020b

   

论坛徽章:
0
10 [报告]
发表于 2012-10-31 21:40 |只看该作者
回复 9# jason680

再次感谢!我得好好学习下awk了。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP