免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: bikkuri
打印 上一主题 下一主题

[文本处理] 用awk写的base64编码脚本,大家帮忙修改一下! [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
21 [报告]
发表于 2013-12-26 23:28 |只看该作者
我用这个程序看了一下Busybox的分隔符RS、FS、ORS、OFS,好象分别是0x0a, 0x20, 0x0a, 0x20,都和0x00没有关系啊?
  1. function asc(char,l_found)
  2. {
  3.         l_found=0
  4.         for (i=0;i<=255;i++){
  5.         if (sprintf("%c",i)==char) l_found=i;
  6.         }
  7.         return l_found;
  8. }

  9. BEGIN{
  10. printf "RS=%i\n",asc(RS);
  11. printf "FS=%i\n",asc(FS);
  12. printf "ORS=%i\n",asc(ORS);
  13. printf "OFS=%i\n",asc(OFS);
  14. }
复制代码
  1. root@unknown:/tmp/test# ./test.sh
  2. RS=10
  3. FS=32
  4. ORS=10
  5. OFS=32
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
22 [报告]
发表于 2013-12-27 00:11 |只看该作者
本帖最后由 bikkuri 于 2013-12-27 01:21 编辑

如果我要把记录在awk里连接起来应该怎么做呢?
  1. root@unknown:/tmp/test# echo -e "Hello \0 World!"|awk 'BEGIN{a=""}{a=a $0}END{print a}'|hexdump -C
  2. 00000000  48 65 6c 6c 6f 20 20 57  6f 72 6c 64 21 0a        |Hello  World!.|
  3. 0000000e
  4. root@unknown:/tmp/test# echo -e "Hello \0 World!"|awk 'BEGIN{a=""}{a=a $0;a=a "\0"}END{print a}'|hexdump -C
  5. 00000000  48 65 6c 6c 6f 20 20 57  6f 72 6c 64 21 0a        |Hello  World!.|
  6. 0000000e
  7. root@unknown:/tmp/test# echo -e "Hello \0 World!"|awk 'BEGIN{a=""}{a=a $0;a=a ""}END{print a}'|hexdump -C
  8. 00000000  48 65 6c 6c 6f 20 20 57  6f 72 6c 64 21 0a        |Hello  World!.|
  9. 0000000e
复制代码
好象就算把记录连起来了,分隔符还是没办法连进去啊?

论坛徽章:
771
金牛座
日期: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
23 [报告]
发表于 2013-12-27 11:55 |只看该作者
本帖最后由 Herowinter 于 2013-12-27 11:58 编辑

回复 22# bikkuri
awk本来就不是很适合处理2进制文件,
你可以参考一下这篇文章,
http://www.ibm.com/developerworks/cn/linux/shell/awk/binary/

试试类似这种行不行
  1. echo -e "Hello\0World"|od|./base64encode.sh
复制代码
我是完全看不懂出来的结果对不对。

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
24 [报告]
发表于 2013-12-27 13:15 |只看该作者
谢谢Herowinter的指点,这条思路确实看起来可行。
我的busybox上没有od命令,但是有类似的hexdump命令。
这样的话,我需要对hexdump的输出做一些小调整:
  1. root@unknown:/tmp/test# cat a.gz|hexdump -C
  2. 00000000  1f 8b 08 00 85 77 bb 52  02 03 f3 48 cd c9 c9 e7  |.....w.R...H....|
  3. 00000010  02 00 16 35 96 31 06 00  00 00                    |...5.1....|
  4. 0000001a
  5. root@unknown:/tmp/test#
复制代码
我想把中间的部分取出来,输出为如下形式的一行:
  1. 1f 8b 08 00 85 77 bb 52 02 03 f3 48 cd c9 c9 e7 02 00 16 35 96 31 06 00 00 00
复制代码
用sed或者awk应该怎么处理呢?
要注意的是中间部分每行16个字节,前八个之间和后八个之间都是一个空格隔开,但是第八个和第九个之间是两个空格。

论坛徽章:
771
金牛座
日期: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
25 [报告]
发表于 2013-12-27 13:29 |只看该作者
回复 24# bikkuri
目测的,不大确定行不行。
  1. cat a.gz|hexdump -C

  2. 00000000  1f 8b 08 08 02 0f bd 52  00 03 61 00 f3 48 cd c9  |.......R..a..H..|
  3. 00000010  c9 0f cf 2f ca 49 e1 02  00 07 b8 79 1b 0b 00 00  |.../.I.....y....|
  4. 00000020  00                                                |.|
  5. 00000021


  6. cat a.gz|hexdump -C|awk '{for(i=2;i<NF;i++)s=s$i}END{print s}'

  7. 1f8b0808020fbd5200036100f348cdc9c90fcf2fca49e1020007b8791b0b000000
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
26 [报告]
发表于 2013-12-27 13:31 |只看该作者
我仍想保留每个字节之间的空格呢?
  1. 1f 8b 08 00 85 77 bb 52 02 03 f3 48 cd c9 c9 e7 02 00 16 35 96 31 06 00 00 00
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
27 [报告]
发表于 2013-12-27 13:35 |只看该作者
好象这样可以,只是最开始多了一个空格。
  1. root@unknown:/tmp/test# cat a.gz|hexdump -C|awk '{for(i=2;i<NF;i++)s=s" "$i}END{print s}'
  2. 1f 8b 08 00 85 77 bb 52 02 03 f3 48 cd c9 c9 e7 02 00 16 35 96 31 06 00 00 00
  3. root@unknown:/tmp/test#
复制代码

论坛徽章:
771
金牛座
日期: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
28 [报告]
发表于 2013-12-27 13:36 |只看该作者
回复 26# bikkuri
  1. cat a.gz|hexdump -C|awk '{for(i=2;i<NF;i++)s=s?s" "$i:$i}END{print s}'

  2. 1f 8b 08 08 02 0f bd 52 00 03 61 00 f3 48 cd c9 c9 0f cf 2f ca 49 e1 02 00 07 b8 79 1b 0b 00 00 00
复制代码

论坛徽章:
771
金牛座
日期: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
29 [报告]
发表于 2013-12-27 13:37 |只看该作者
回复 27# bikkuri
判断一下s是否非空再拼空格就没有第一个空格了。

   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
30 [报告]
发表于 2013-12-27 14:15 |只看该作者
好的。谢谢!这下不用处理NULL字符了,只要修改一下编码程序就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP