免费注册 查看新帖 |

Chinaunix

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

[文本处理] 删除制定行后面的换行符 [复制链接]

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
11 [报告]
发表于 2014-06-19 14:32 |只看该作者
回复 1# luobingyin
  1. sed ':a;N;s/\n/ /;0~3b;ta' file
复制代码
加上-i参数可直接修改原文件。
   

论坛徽章:
0
12 [报告]
发表于 2014-06-19 14:42 |只看该作者
回复 10# luobingyin

额,N的效果我一直说不准确,大致是将下一行内容拖过来一起处理,N;N就是拖了下一行过来,然后又拖了下一行过来,总共就是三行了。

论坛徽章:
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
13 [报告]
发表于 2014-06-19 15:01 |只看该作者
回复 3# dn833

got bug sometime

$ awk 'ORS=NR%3?" ":"\n"' FILE
a b c d e f g h i
1 2 3 4 5 6 7 8 9
7 6 5 4 3 2 1 0 8

# got bug
$ awk 'ORS=NR%3?"":"\n"' FILE
i
9
8

# no issue
$ awk '{ORS=NR%3?"":"\n"}1' FILE
a b c de f g hi
1 2 3 45 6 7 89
7 6 5 43 2 1 08
   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
14 [报告]
发表于 2014-06-19 15:23 |只看该作者
回复 8# luobingyin


两个 N, 所以是 每次读进来三行, 然后替换掉 "\n" 再输出.     

论坛徽章:
0
15 [报告]
发表于 2014-06-19 16:21 |只看该作者
回复 13# jason680

'ORS=...'不仅作为执行的语句,同时也作为pattern。在awk中,空字符串表示“假”,所以隐含的{print $0}不执行。

论坛徽章:
0
16 [报告]
发表于 2014-09-04 10:19 |只看该作者
本帖最后由 luobingyin 于 2014-09-04 10:19 编辑

回复 2# jason680


    jason再请教一下哈,我想把这个弄成一个shell脚本文件,运行起来比较方便,要余的行数已经弄出来了,存在num这个变量里,此时再使用awk命令并调用这个变量就会出现问题,不知道有什么解决办法?我的脚本是这么写的:

set num=`grep -n "#" test.txt | cut -d ":" -f1`
echo $num
awk 'ORS=NR%$num?" ":"\n"' > result.txt

运行时会报错:
awkFILENAME=./ test.txt FNR=1) fatal: division by zero attempted in `%'

我的test文件是这样的
a b c d
e f#
1 2 3 4
5 6
2 3 5 7
2 3

运行结果
4
awkFILENAME=./ test.txt FNR=1) fatal: division by zero attempted in `%'

我是用csh写的

论坛徽章:
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
17 [报告]
发表于 2014-09-04 10:28 |只看该作者
回复 16# luobingyin
  1. num=`grep -n "#" test.txt | cut -d ":" -f1`
  2. echo $num
  3. awk -v n=$num 'ORS=NR%n?" ":"\n"' test.txt > result.txt
复制代码

论坛徽章:
0
18 [报告]
发表于 2014-09-04 10:33 |只看该作者
回复 17# Shell_HAT


    好用了,原来awk是这样调用外部变量的,非常感谢~

论坛徽章:
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-09-04 10:40 |只看该作者
回复 16# luobingyin

awk初学之常见问题
http://bbs.chinaunix.net/forum.p ... mp;fromuid=24785593

   

论坛徽章:
0
20 [报告]
发表于 2014-09-04 10:45 |只看该作者
回复 19# jason680


    非常感谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP