免费注册 查看新帖 |

Chinaunix

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

[文本处理] 怎么过滤和位置有关的字符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-30 16:49 |只看该作者 |倒序浏览
如下:
1234
2314
5467
7786
3246
7890
===================
取出1在第一位的行哪就只有1234这一行了。
取出2在第二位的行就有 1234,3246
以此类推要取出第3,4位的又是怎么写

论坛徽章:
0
2 [报告]
发表于 2012-09-30 19:16 |只看该作者
grep '[0-9][0-9]3[0-9]'
grep '[0-9][0-9][0-9]4'

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
3 [报告]
发表于 2012-09-30 20:44 |只看该作者
  1. grep -e "^1"
  2. grep -e "^.2"
  3. grep -e "^..3"
  4. grep -e "^...4"
复制代码

论坛徽章:
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
4 [报告]
发表于 2012-09-30 22:24 |只看该作者
  1. awk -F "" '{for(i=1;i<=NF;i++)if(i==$i)print $0}'
复制代码

论坛徽章:
3
IT运维版块每日发帖之星
日期:2015-12-30 06:20:00IT运维版块每日发帖之星
日期:2016-02-16 06:20:00每日论坛发贴之星
日期:2016-02-16 06:20:00
5 [报告]
发表于 2012-09-30 22:31 |只看该作者
本帖最后由 w630866139 于 2012-09-30 22:37 编辑
dn833 发表于 2012-09-30 22:24



dude:
  1. [root@localhost ~]# cat num.
  2. 1234
  3. 2314
  4. 5467
  5. 7786
  6. 3246
  7. 7890
  8. 3788
  9. [root@localhost ~]# cat num. | awk -F "" '{for(i=1;i<=NF;i++)if(i==$i)print $0}'
  10. 1234
  11. 1234
  12. 1234
  13. 1234
  14. 2314
  15. 3246
复制代码
Thanks、it works

论坛徽章:
0
6 [报告]
发表于 2012-10-01 15:51 |只看该作者
damcool 发表于 2012-09-30 20:44


这个可以用。但是要反过来呢?原来是取出来的,现在变成去除了
1234
2314
5467
7786
3246
7890
===================
去除1在第一位的行哪就不要1234这一行了。
去除2在第二位的行就不要 1234,3246
以此类推要取出第3,4位的又是怎么写

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
7 [报告]
发表于 2012-10-01 21:55 |只看该作者
本帖最后由 winway1988 于 2012-10-01 21:56 编辑
  1. awk -F "" '{for(i=1;i<=NF;i++)if(i==$i)next}1' urfile
复制代码
  1. #! /bin/env python
  2. #-*- coding: utf-8 -*-
  3. #

  4. with open('./urfile') as f:
  5.     for line in f:
  6.         for i, c in enumerate(line):
  7.             if str(i + 1) == c:
  8.                 print line,
复制代码
  1. #! /bin/env python


  2. #-*- coding: utf-8 -*-
  3. #

  4. with open('./urfile') as f:
  5.     for line in f:
  6.         for i, c in enumerate(line):
  7.             if str(i + 1) == c:
  8.                 break
  9.         else:
  10.             print line,
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2012-10-02 00:46 |只看该作者
回复 6# tyguaike


    how about this?

awk -v n=1 'index($0,n) != n' file # To keep the line, say '==', and vice versa.

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
9 [报告]
发表于 2012-10-02 08:53 |只看该作者
tyguaike 发表于 2012-10-01 15:51
这个可以用。但是要反过来呢?原来是取出来的,现在变成去除了
1234
2314


加-v
  1. grep -v -e "^1"
  2. grep -v -e "^.2"
  3. grep -v -e "^..3"
  4. grep -v -e "^...4"
复制代码

论坛徽章:
0
10 [报告]
发表于 2012-10-03 14:15 |只看该作者
谢谢大家。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP