免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2372 | 回复: 14

[学习共享] 求助用shell对一个文件内容进行转换 [复制链接]

论坛徽章:
0
发表于 2018-06-27 17:19 |显示全部楼层
各位大神,有以下问题请教:
(1)
1A 5B 10 20
11 25 20 5C
20 25 23 86
20 25 23 85
怎么变成
1A
5B
10
20
11
25
20
5C
20
25
23
86
20
25
23
85
(2)
1A
5B
10
20
11
25
20
5C
20
25
23
86
20
25
23
85

怎么变成
@00000000 1A
@00000001 5B
@00000002 10
@00000003 20
@00000004 11
@00000005 25
@00000006 20
@00000007 5C
@00000008 20
@00000009 25
@0000000A 23
@0000000B 86
@0000000C 20
@0000000D 25
@0000000E 23
@0000000F 85

论坛徽章:
0
发表于 2018-06-27 21:27 |显示全部楼层
  1. #cat a.log
复制代码

论坛徽章:
0
发表于 2018-06-27 21:30 |显示全部楼层
  1. #cat a.log
  2. 1A 5B 10 20
  3. 11 25 20 5C
  4. 20 25 23 86
  5. 20 25 23 85

  6. #awk '{gsub(" ","\n"); print $0}' a.log
  7. 1A
  8. 5B
  9. 10
  10. 20
  11. 11
  12. 25
  13. 20
  14. 5C
  15. 20
  16. 25
  17. 23
  18. 86
  19. 20
  20. 25
  21. 23
  22. 85

  23. #awk '{gsub(" ","\n"); print $0}' a.log | awk '{system("printf \"@%08x\" "NR);print " "$0}'

  24. @00000001 1A
  25. @00000002 5B
  26. @00000003 10
  27. @00000004 20
  28. @00000005 11
  29. @00000006 25
  30. @00000007 20
  31. @00000008 5C
  32. @00000009 20
  33. @0000000a 25
  34. @0000000b 23
  35. @0000000c 86
  36. @0000000d 20
  37. @0000000e 25
  38. @0000000f 23
  39. @00000010 85
复制代码

论坛徽章:
0
发表于 2018-06-27 21:31 |显示全部楼层
  1. #cat a.log
复制代码

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 2018-06-28 09:32 |显示全部楼层
本帖最后由 christmas1102 于 2018-06-29 11:28 编辑

回复 1# 闪亮的马路

(1)
  1. awk -vRS="[ \n]" '$1=$1' urfile
复制代码


(2)
  1. awk '{for(i=1;i<=NF;i++){printf "@%08X%3s\n",a++,$i}}' urfile
复制代码

论坛徽章:
0
发表于 2018-06-28 10:36 |显示全部楼层
非常感谢Unix_C_Linux,christmas1102,两位给的表达式,我都试过了,都可以,再次感谢!

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2018-06-28 10:47 |显示全部楼层
本帖最后由 wh7211 于 2018-06-28 10:50 编辑

回复 1# 闪亮的马路


  1. cat 1
  2. 1A 5B 10 20
  3. 11 25 20 5C
  4. 20 25 23 86
  5. 20 25 23 85

  6. awk '{for(i=1;i<=NF;i++){print $i}}' 1
  7. 1A
  8. 5B
  9. 10
  10. 20
  11. 11
  12. 25
  13. 20
  14. 5C
  15. 20
  16. 25
  17. 23
  18. 86
  19. 20
  20. 25
  21. 23
  22. 85

  23. cat 2
  24. 1A
  25. 5B
  26. 10
  27. 20
  28. 11
  29. 25
  30. 20
  31. 5C
  32. 20
  33. 25
  34. 23
  35. 86
  36. 20
  37. 25
  38. 23
  39. 85

  40. awk '{printf("@%08X %s\n",NR-1,$0)}' 2
  41. @00000000 1A
  42. @00000001 5B
  43. @00000002 10
  44. @00000003 20
  45. @00000004 11
  46. @00000005 25
  47. @00000006 20
  48. @00000007 5C
  49. @00000008 20
  50. @00000009 25
  51. @0000000A 23
  52. @0000000B 86
  53. @0000000C 20
  54. @0000000D 25
  55. @0000000E 23
  56. @0000000F 85
复制代码

论坛徽章:
0
发表于 2018-06-28 13:45 |显示全部楼层
回复 3# Unix_C_Linux


1A 5B 10 20
11 25 20 5C
20 25 23 86
20 25 23 85
将以上的数据变换成以下格式
@00000001 20105B1A
@00000002 5C202511
@00000003 86232520
@00000004 85232520


其实就是将每行的四个数位置调转一下(大小端转换),然后去掉中间的空格;
在每行的前面增加地址(也就是例如@00000001)地址是16进制数据;
以上是我举得一个例子,数据较少,实际中数据至少有几百行,所以希望给的表达式也考虑兼容更多数据,而不是直接写@00000001,@00000002,@00000003,@00000004


这个怎弄呢?

论坛徽章:
766
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2018-06-28 14:17 |显示全部楼层
回复 8# 闪亮的马路

  1. awk '{printf("@%08X %s%s%s%s\n",NR,$4,$3,$2,$1)}' i
  2. @00000001 20105B1A
  3. @00000002 5C202511
  4. @00000003 86232520
  5. @00000004 85232520
复制代码





论坛徽章:
0
发表于 2018-06-28 14:37 |显示全部楼层
回复 9# Herowinter

4个可以这样写,如果有200行数据呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP