免费注册 查看新帖 |

Chinaunix

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

[文本处理] 文本整块前提分别隔行插入 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-02 21:37 |只看该作者 |倒序浏览
最好用awk或sed,其他也可,文件内容如下:
1001
1002
1003
1004
1005

1006
1007
1008
1009
1010
1011
1012
22220001
22220002
22220003
22220004
22220005

22220006
22220007
22220008
22220009
22220010
22220011
22220012

得到结果:(请注意删掉4行,不删也可以。)
1001
22220001
1002
22220002
1003
22220003
1004
22220004
1005
22220005
1008
22220008
1009
22220009
1010
22220010
1011
22220011
1012
22220012

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
2 [报告]
发表于 2014-12-02 22:25 |只看该作者
回复 1# lqs623


    根据给定行的后三位判断的
  1. awk '{c[substr($0,2,4)]=$0;b=substr($0,6);if(c[b])print c[b]"\n"$0}' urfile
复制代码

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
3 [报告]
发表于 2014-12-02 22:37 |只看该作者
awk --re-interval  '{if($0~/[0-9]{8}/) {a[++s]=$0} else if($0~/[0-9]{4}/) {b[++t]=$0}}
END{for ( i=1;i<=NR/2;i++) {print b[i];print a[i]}}' 3
1001
22220001
1002
22220002
1003
22220003
1004
22220004
1005
22220005
1006
22220006
1007
22220007
1008
22220008
1009
22220009
1010
22220010
1011
22220011
1012
22220012


   

论坛徽章:
0
4 [报告]
发表于 2014-12-02 22:51 |只看该作者
回复 3# zxy877298415

成功,非常感谢!


   

论坛徽章:
0
5 [报告]
发表于 2014-12-02 22:59 |只看该作者
本帖最后由 lqs623 于 2014-12-02 23:42 编辑

回复 2# Buring__
首先感谢您!我这里是XP系统,没有装Shell,你的代码经过修改为:
gawk "{c[substr($0,2,4)]=$0;b=substr($0,6);if(c)print c"""\n"""$0}" 10.txt>00.txt
输出为空。不行。请告诉我,我这为什么不能用?


三楼代码修改为:
gawk --re-interval  "{if($0~/[0-9]{8}/) {a[++s]=$0} else if($0~/[0-9]{4}/) {b[++t]=$0}}END{for ( i=1;i<=NR/2;i++) {print b;print a}}" 10.txt>0.txt   成功。

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
6 [报告]
发表于 2014-12-03 01:31 |只看该作者
本帖最后由 dn833 于 2014-12-03 01:33 编辑

#!/bin/bash
for i in $(grep -Po '^....$' /path/file)
do
if [ $(grep -Po '^....'${i/1/0}'' /path/file) ];then
echo $i
grep -Po '^....'${i/1/0}'' /path/file
fi
done

加班结束写个玩玩

论坛徽章:
0
7 [报告]
发表于 2014-12-03 12:28 |只看该作者
本帖最后由 lqs623 于 2014-12-03 12:30 编辑

回复 6# dn833

谢谢!我这里是 WINDOWS xp 。这种多行的命令,我这不能用,
请给写个,在WINDOWS xp上能用的命令,一行的命令能用。
   

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
8 [报告]
发表于 2014-12-04 09:43 |只看该作者
在Windows下使用的awk的话,除两端的引号,其他都要用反斜杠转义的回复 5# lqs623


   

论坛徽章:
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
9 [报告]
发表于 2014-12-04 11:04 |只看该作者
回复 5# lqs623
  1. gawk "{c[substr($0,2,4)]=$0;b=substr($0,6);if(c[b])print c[b]\"\n\"$0}" a.txt > b.txt
复制代码

论坛徽章:
0
10
发表于 2014-12-04 11:14
本帖最后由 lqs623 于 2014-12-04 11:20 编辑

回复 9# Shell_HAT


    先谢谢!输出是空的。不行呀。请再在给写一个!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP