免费注册 查看新帖 |

Chinaunix

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

[文本处理] 对于文本每4行合并为一行问题? [复制链接]

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
11 [报告]
发表于 2014-06-12 00:17 |只看该作者
6楼是最好的解决方法

给个xargs的
  1. $ awk '{print $0"< \\br>"}' hh|xargs -d'\n' -n4
  2. 1111< \br> 2222< \br> 3333< \br> 4444< \br>
  3. 5555< \br> 6666< \br> 7777< \br> 8888< \br>
  4. 9999< \br> 1010< \br> 1111< \br> 1212< \br>
复制代码

论坛徽章:
1
白羊座
日期:2014-11-13 10:19:16
12 [报告]
发表于 2014-06-12 01:36 |只看该作者
本帖最后由 iocg 于 2014-06-12 01:51 编辑

回复 8# WilliBhamlll


   
awk 'ORS=NR%4?"< \\br>":"< \\br>\n"' file
sed ':a;N;s/\n/< \\br>/;0~4{s/$/< \\br>/;b};ta' file


    对这两段代码很感兴趣。
    AWK
    原来可以直接改变ORS #输出内容记录分隔符( 默认为 \n)
    用a=b?"c":"d"这种三目赋值运算十分简洁。

    SED
    不知道理解对不对
    0~4的意思是每4行处理一次{}
    前3行经过t跳转到a标签执行N;s/\n/< \\br>/;  即替换换行符为< \br>也就将前4行合并成一行了。
    到第4行时需先执行{s/$/< \\br>/;b},在第4行尾加< \br>,b跳过后面的ta??第4行不替换\n
   

    b label   跳转到标签label处,如同c语言的goto语句
    t label    相当于条件跳转
    N          读入下一行,将其*追加*到模式空间尾,当前行号加1


论坛徽章:
1
白羊座
日期:2014-11-13 10:19:16
13 [报告]
发表于 2014-06-12 01:51 |只看该作者
回复 11# huang6894

$ awk '{print $0"< \\br>"}' hh|xargs -d'\n' -n4

    非常感谢!一种新方法
    Xargs用来取代管道来传递参数?
   
    -d'\n'将分隔符改成换行,-n4表示每次调用4行吗。


    -d delim 分隔符,默认的xargs分隔符是回车
    -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。


     不过效率上低了些,不过很新颖!!

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
14 [报告]
发表于 2014-06-12 08:50 |只看该作者
xargs -n 4 < urfile

论坛徽章:
1
处女座
日期:2014-06-01 17:09:46
15 [报告]
发表于 2014-06-12 12:18 |只看该作者
cat 1.txt  | xargs  -n 4 | sed "s# #< /br>#g"
1111< /br>222< /br>3333< /br>4444
5555< /br>6666< /br>7777< /br>8888
9999< /br>1010< /br>1111< /br>1212

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
16 [报告]
发表于 2014-06-12 12:30 |只看该作者
本帖最后由 关阴月飞 于 2014-06-12 12:41 编辑
  1. awk '{printf NR%4==0?$0"< \\br>\n":$0"< \\br>"}'  urfile
  2. xargs -n4 < urfile |sed 's# #< \\br>#g'
  3. paste - - - - < urfile  |sed 's#\t#< \\br>#g'
  4. pr -t4Ja  -S'< \br>'  urfile
复制代码

论坛徽章:
0
17 [报告]
发表于 2014-06-12 16:53 |只看该作者
本帖最后由 apzc2529 于 2014-06-12 16:57 编辑

回复 2# expert1

awk '{$0=$0"< \\br>";if(NR%4==0){$0=$0 "\r";print $0}else{printf $0}}'

为什么上面的可以,而下面的却不可以?
awk '{$0=$0"< \\br>";if(NR%4==0){$0=$0 "\r"};printf $0}'
  1. cunzhang@Debian:~$ seq 1 12|awk '{$0=$0"< \\br>";if(NR%4==0){$0=$0 "\r";print $0}else{printf $0}}'
  2. 1< \br>2< \br>3< \br>4< \br>
  3. 5< \br>6< \br>7< \br>8< \br>
  4. 9< \br>10< \br>11< \br>12< \br>
  5. cunzhang@Debian:~$ seq 1 12|awk '{$0=$0"< \\br>";if(NR%4==0){$0=$0 "\r"};printf $0}'
  6. cunzhang@Debian:~$ \br>12< \br>

复制代码

论坛徽章:
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
18 [报告]
发表于 2014-06-12 17:30 |只看该作者
本帖最后由 jason680 于 2014-06-12 17:31 编辑

回复 1# iocg

$ awk -vC=4 -vw='< \\br>' '{s=s$0w}NR%C==0{print s;s=""}END{if(s)print s}' FILE
1111< \br>2222< \br>3333< \br>4444< \br>
5555< \br>6666< \br>7777< \br>8888< \br>
9999< \br>1010< \br>1111< \br>1212< \br>
....< \br>

   

论坛徽章:
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
19 [报告]
发表于 2014-06-12 17:34 |只看该作者
回复 17# apzc2529


\r  ==> \n    

论坛徽章:
0
20 [报告]
发表于 2014-06-12 17:56 |只看该作者
回复 17# apzc2529

print
VS
printf
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP