免费注册 查看新帖 |

Chinaunix

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

[学习共享] 做个小小地总结。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-21 06:15 |只看该作者 |倒序浏览
本帖最后由 力哥丶 于 2012-12-21 11:25 编辑

我这俩天一直在整理函数和变量。数组了解过,不太熟。就在此时我蛋疼的看到asort asorti,

古罗马的碑文上写着3.1以上的版本才能用!请含泪升级版本

明白后就赶紧来CU发个帖,也顺便记录到我的wiki中。

文件内容:

45 21 54
23 85 48
36 42 68

asort:对数组的值进行排序,但会丢弃原先的数值。用法asort(a,b)因为他是对数值排序,所以必须指定数值。
  1. [root@localhost ~]# awk '{a[$0]=$1}END{s=asort(a,b);for(i=1;i<=s;i++)print i,b[i]}' cc
  2. 1 23
  3. 2 36
  4. 3 45
复制代码
asorti:对数组的下标进行排序,用法asorti(a,b)
  1. awk '{a[$2]}END{s=asorti(a,b);for(i=1;i<=s;i++)print i,b[i]}' cc
  2. 1    21
  3. 2    85
  4. 3    42
复制代码
我本来是想排序整个文件的但a[$0] 只对第一列进行的排序不知道为啥。好像必须要指定域后才生效


顺道也说下!a[$1]++,虽然这个已经被人类说了N次了,但是我还是想说,

文本内容:

1
2
1
3
4
4
1
  1. [root@localhost ~]# awk '!a[$1]++' cc
  2. 1
  3. 2
  4. 3
  5. 4
复制代码
!a[$1]++:$1的下表为1,值为0,既!0,值为1,则输出
!a[$1]++:$1的下表为2,值为0,既!0,值为1,则输出
!a[$1]++:$1的下表为1,值为1,既!1,值为0,则不输出

一次类推。。

原先看论坛里说的我以为第一次是1,第二次是0,第三次又是1,那么这样,就算没有重复的也不会输出。

最后稍微看了下数组的简介后,第一次$1的下标是1,值为!0就会输出,那么在碰到下标还是1的时候

才会去比对,当新的下标出现时,将初始化数值,既为0.

删除/etc/passwd文件最后一行(这个例子是Shell_HAT,拿来用下啦。莫生气)
FS:输入文本的分隔符。但如果不指定BEGIN,就会从文本第一以后生效。
OFS:输出文本分隔符
FS=OFS

首先看下FS的输出:
  1. [root@localhost ~]# awk 'BEGIN{FS=":"}{NF-=1}1' /etc/passwd
  2. root x 0 0 root /root
  3. bin x 1 1 bin /bin
  4. daemon x 2 2 daemon /sbin
  5. adm x 3 4 adm /var/adm
  6. lp x 4 7 lp /var/spool/lpd
复制代码
最后一行是删除了,但是貌似没有“:”你会感觉很不爽,在看下FS=OFS
  1. [root@localhost ~]# awk 'BEGIN{FS=OFS=":"}{NF-=1}1' /etc/passwd
  2. root:x:0:0:root:/root
  3. bin:x:1:1:bin:/bin
  4. daemon:x:2:2:daemon:/sbin
  5. adm:x:3:4:adm:/var/adm
复制代码
总结:FS=OFS意思是输入的分隔符为“:”,并删除“:”最后一行。

这里的1是什么意思?

1代表为真。则输出。。
  1. awk 'BEGIN{FS=":"}{NF-=1}1' /etc/passwd
复制代码
相当于
  1. awk 'BEGIN{FS=":"}{NF-=1}{print $0}' /etc/passwd
复制代码
总结完毕

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2012-12-21 08:27 |只看该作者
Good good study. Day day up.

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2012-12-21 08:46 |只看该作者
本帖最后由 waker 于 2012-12-21 08:46 编辑
  1. awk '{a[$2]=$0}END{s=asorti(a,b);for(i=1;i<=s;i++)print a[b[i]]}' cc
复制代码
楼主明白自己在想什么么?

论坛徽章:
2
水瓶座
日期:2014-08-20 14:38:50辰龙
日期:2014-09-15 15:49:06
4 [报告]
发表于 2012-12-21 09:08 |只看该作者
学习了》》》》》

论坛徽章:
0
5 [报告]
发表于 2012-12-21 10:34 |只看该作者
回复 3# waker


    你明白你在说什么么?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
6 [报告]
发表于 2012-12-21 10:39 |只看该作者
回复 5# 力哥丶
不明白的是孙子好不好?

   

论坛徽章:
0
7 [报告]
发表于 2012-12-21 10:43 |只看该作者
本帖最后由 力哥丶 于 2012-12-21 10:44 编辑

回复 6# waker


    我也是这么想的

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2012-12-21 10:44 |只看该作者
力哥丶 发表于 2012-12-21 10:43
回复 6# waker


把"不明白"变成"不知道"了?语文终于长进了

论坛徽章:
0
9 [报告]
发表于 2012-12-21 10:48 |只看该作者
回复 8# waker


    也用不着你指点,谢谢,

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
10 [报告]
发表于 2012-12-21 10:49 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP