免费注册 查看新帖 |

Chinaunix

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

awk的FIELDWIDTHS指定了第一个宽度,可以把剩下的所有定为一个字段吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-16 08:20 |只看该作者 |倒序浏览
有两个问题想请教各位前辈:
  1. echo 123456789 | awk -vFIELDWIDTHS="1 2 3 4 5" -vOFS="|" '{NF=NF}1'
复制代码
这里的{NF=NF}是什么意思?为什么要有,而且我试过了,不加这个,前面的两个变量好像不起作用,望明示。

还有假如我想指定前三个为一个字段,也就是此例中的123为第一个字符,剩下的所有都作为第二字段,不管剩下的是多少字符,该怎么写呢?
望各位前辈多多指点啊,先谢过了。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2012-04-16 08:31 |只看该作者
你的这个问题(NF=NF) 和下面的链接里的第8个问题一样,自己先看看吧。
http://bbs.chinaunix.net/thread-2319120-1-1.html

问题8:
GNU awk的$1=$1到底有什么作用?$0=$0呢?

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
3 [报告]
发表于 2012-04-16 08:31 |只看该作者
  1. echo 123456789123456789123456789 | awk -vFIELDWIDTHS="1 2 3 4 5" -vOFS="|" '{NF=NF}1'
  2. 1|23|456|7891|23456
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-04-16 08:59 |只看该作者
本帖最后由 dahaoshanhe 于 2012-04-16 09:05 编辑

就相当于一个欺骗吧~

echo 123456789 | awk -vFIELDWIDTHS="1 2 3 4 5" -vOFS="|" '($2=$2)1'

论坛徽章:
0
5 [报告]
发表于 2012-04-16 10:49 |只看该作者
本帖最后由 prints 于 2012-04-16 10:50 编辑

谢谢楼上的两位,大概明白了,回去再巩固巩固。
我的第二个问题:如何把1234567890分割成123秘4567890,我只是打个比方,如果不用数数的方法,也就是说输出的第一个字段为3个字符,剩下的所有字符为一个字段,不管剩下的是是多少个字符都归为一个字段,这个FIELDWIDTHS是不是只能一个段一个段的指定宽度?如果是这样的话,那需要进行类似的操作很麻烦啊,都要一个一个地去数啊。

论坛徽章:
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
6 [报告]
发表于 2012-04-16 11:05 |只看该作者
本帖最后由 jason680 于 2012-04-16 14:43 编辑

回复 5# prints

FIELDWIDTHS="3 9999"

给文档一小部份
说说你真正的问题
或许比较容易些...
   

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
7 [报告]
发表于 2012-04-16 19:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2013-01-22 15:58 |只看该作者
回复 7# zooyo

'{NF=NF}1'
最后为什么要加上1。 自己尝试了下,没有1就不会有output,好像加其他数字也可以。能帮忙解释下么?
   

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
9 [报告]
发表于 2013-01-22 16:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2013-01-22 17:30 |只看该作者
回复 9# zooyo


    like '{$1=$1} if(1) {print $0}' ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP