免费注册 查看新帖 |

Chinaunix

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

[文本处理] 【已解决】awk关于输出的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-04 20:28 |只看该作者 |倒序浏览
本帖最后由 ch_hoho 于 2014-12-05 10:45 编辑

input:   echo a | cat -A |awk 'NF++{printf ("%s%d",$0, 3)}'
output: a$ 3

input:  echo a | cat -A |awk 'NF{printf ("%s%d",$0, 3)}'
output:a$3

为什么NF++与NF会产生不同的输出?
NF++导致域增加,多生成一个空域。

感谢解答。

论坛徽章:
1
15-16赛季CBA联赛之同曦
日期:2017-03-19 09:57:50
2 [报告]
发表于 2014-12-04 21:36 |只看该作者
{:3_190:}貌似NF++,$0就多一个空格,
NF本来是域的个数嘛,++后,域个数加1,于是就多打印了一个空白的域,应该是这样的,看楼下大神怎么解答

论坛徽章:
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
3 [报告]
发表于 2014-12-04 21:52 |只看该作者
NF++ 后 会有一个为空值的$2,

论坛徽章:
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
4 [报告]
发表于 2014-12-04 21:56 |只看该作者
  1. $ echo a|cat -A|awk '{for(i=1;i<=NF;i++)print i,"#"$i"#"}'
  2. 1 #a$#
复制代码
  1. $ echo a|cat -A|awk 'NF++{for(i=1;i<=NF;i++)print i,"#"$i"#"}'
  2. 1 #a$#
  3. 2 ##
复制代码
可以这样对比一下

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
5 [报告]
发表于 2014-12-05 14:53 |只看该作者
改变NF会让awk重组(reconstitute)$0.
在你这个case里, 也许是个意外.
不过我们很多时候是有意而为之的(只改变OFS的时候),
常见的语句有$1=$1和NF=NF, 因为这两条语句都是没有side effect的.
在你这个case里, 重组公式为$0=$1+OFS+$2, 也就是$0="a$" + " " + "".
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP