免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2440 | 回复: 4

[文本处理] awk中这个表达式怎么理解? [复制链接]

论坛徽章:
2
狮子座
日期:2014-05-30 21:43:03巳蛇
日期:2014-05-30 21:46:14
发表于 2014-05-31 00:16 |显示全部楼层
5可用积分
(ORS=( i=!i)?"":RS)||1
我的理解是:
(ORS=( i=!i)?"":RS)  或者1
ORS等于( i=!i)的值吗?若是则赋值ORS为空,否则等于RS
我的理解对吗?
在下不解的地方是 (i=!i),貌似没有这个    =!    操作符啊?

此外,通过这个命令输出结果为:

  1. sed 10 | awk ' {(ORS=( i=!i)?"":RS)||1;print}'
  2. 12
  3. 34
  4. 56
  5. 78
  6. 910
复制代码
如果输出成这样该如何操作?
21
43
65
87
109

十分感谢!

最佳答案

查看完整内容

目测原来应该是这样的,被楼主篡改了~先解释一下i=!i吧~首先=!不是操作符,写成这样或许你就明白了:i=(!i)楼主你运行一下下面这个命令就能理解每一行i的值了~理解了i=!i后,再来看这个三元操作符~ORS=(i=!i)?"":RS,根据i=!i的值来决定ORS的值,如果i=!i为真,则ORS="",否则ORS=RS。最后,如果ORS="",表示逻辑或前面的值为假,那么执行后面的1,也就是打印当前行;如果ORS=RS,则直接打印。

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-05-31 00:16 |显示全部楼层
目测原来应该是这样的,被楼主篡改了~
  1. seq 10 | awk '(ORS=(i=!i)?"":RS)||1'
复制代码
先解释一下i=!i吧~
首先=!不是操作符,写成这样或许你就明白了:i=(!i)
楼主你运行一下下面这个命令就能理解每一行i的值了~
  1. seq 10 | awk '{i=!i;print "NR="NR,"i="i}'
复制代码
理解了i=!i后,再来看这个三元操作符~
ORS=(i=!i)?"":RS,根据i=!i的值来决定ORS的值,如果i=!i为真,则ORS="",否则ORS=RS。
最后,如果ORS="",表示逻辑或前面的值为假,那么执行后面的1,也就是打印当前行;如果ORS=RS,则直接打印。
  1. [root@localhost tmp]# seq 10 | awk 'NR%2==0{print $0s}{s=$0}'
  2. 21
  3. 43
  4. 65
  5. 87
  6. 109
  7. [root@localhost tmp]#
复制代码

论坛徽章:
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
发表于 2014-05-31 07:50 |显示全部楼层
这种操作用getline简单明了:
seq 10|awk '{getline a; print $0 a}'
seq 10|awk '{getline a;print a$0}'

论坛徽章:
2
狮子座
日期:2014-05-30 21:43:03巳蛇
日期:2014-05-30 21:46:14
发表于 2014-05-31 09:59 |显示全部楼层
感谢二位的精彩点拨!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP