免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4034 | 回复: 23

[文本处理] 从某列开始对每个数加1 [复制链接]

论坛徽章:
0
发表于 2014-12-30 09:08 |显示全部楼层
例如文档如下:
1 2 3 4 5 6
2 3 4 5 6 7
1 2 3 4 5 6


对第三列及以后各列的数字加1:
1 2 4 5 6 7
2 3 5 6 7 8
1 2 4 5 6 7



这该怎么做呢?

论坛徽章:
0
发表于 2014-12-30 09:28 |显示全部楼层
利用 awk , 对满足条件的列, $n=$n+1;  print

awk 'BEGIN{indx=3}
{  for(nbr=3;nbr<=NF;nbr++){
           $nbr=$nbr+1;
    }
   print;
}'  file1

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
发表于 2014-12-30 09:34 |显示全部楼层
  1. fromLine=3       
  2. function incrementFromSpecifiedCol() {
  3.         while read line; do
  4.                 i=0;
  5.                 for c in $line; do
  6.                         let i++;
  7.                         if [[ $i -le $fromLine ]]; then
  8.                                 echo -n $c " ";
  9.                         else
  10.                                 let c++;
  11.                                 echo -n $c " ";
  12.                         fi
  13.                 done;
  14.                 echo;
  15.         done <testfile;
  16. }
复制代码

论坛徽章:
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
发表于 2014-12-30 09:47 |显示全部楼层
回复 1# mazuju099
  1. awk '{for(i=2;i++<NF;)$i=$i+1}1' urfile
复制代码

论坛徽章:
4
狮子座
日期:2014-04-17 10:45:47双鱼座
日期:2014-08-21 17:16:41处女座
日期:2014-08-26 13:46:46水瓶座
日期:2014-10-28 14:08:50
发表于 2014-12-30 10:05 |显示全部楼层
  1. awk '{for(i=3;i<=NF;i++)$i+=1;print}' i
复制代码

论坛徽章:
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
发表于 2014-12-30 10:10 |显示全部楼层
本帖最后由 bikong0411 于 2014-12-30 10:10 编辑
  1. awk '{for(i=2;i++<NF;)$i+=1}1' urfile
复制代码

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
发表于 2014-12-30 10:33 |显示全部楼层
4楼的不错,学习了,简单处理还是awk跟得心应手些
贴个python的
  1. #!/usr/bin/env python

  2. file = open('test')
  3. list = [i.strip() for i in file.readlines()]
  4. for i in list:
  5.     temporary_list = i.split(' ')
  6.     temporary_list = [int(i) for i in temporary_list]
  7.     count = len(temporary_list)
  8.     for i in range(2,count):
  9.         temporary_list[i] += 1
  10.     temporary_list = [str(i) for i in temporary_list]
  11.     temporary_str = ' '.join(temporary_list)
  12.     print temporary_str
复制代码

求职 : Linux运维
论坛徽章:
4
狮子座
日期:2014-12-20 10:15:35天秤座
日期:2014-12-24 16:54:192015年亚洲杯之科威特
日期:2015-01-27 21:32:482015亚冠之平阳省
日期:2015-10-22 16:31:52
发表于 2014-12-30 19:46 |显示全部楼层
awk '{for(i=3;i<=NF;i++) $i=$i+1}1' file

论坛徽章:
0
发表于 2015-05-31 13:25 |显示全部楼层
jcdiy0601 发表于 2014-12-30 10:33
4楼的不错,学习了,简单处理还是awk跟得心应手些
贴个python的
  1. s = """1 2 3 4 5 6
  2. 2 3 4 5 6 7
  3. 1 2 3 4 5 6"""


  4. li = s.split('\n')

  5. for line in li:
  6.     nline = line.split()
  7.     newline = [nline[0]] + [nline[1]] + [ str(int(x)+1) for x in nline[2:] ]
  8.     #print newline
  9.     print ' '.join(newline)
复制代码
python 哪有那么复杂。。

论坛徽章:
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
发表于 2015-05-31 16:20 |显示全部楼层
回复 1# mazuju099

>>对第三列及以后各列的数字加1

$ awk -vs=3 -va=1 '{for(n=s;n<=NF;n++)$n+=a}1' FILE
1 2 4 5 6 7
2 3 5 6 7 8
1 2 4 5 6 7

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP