忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 908 | 回复: 9

[文本处理] awk代码理解问题 [复制链接]

论坛徽章:
0
发表于 2018-04-09 22:35 |显示全部楼层
学习过程中遇到点迷惑的地方,希望各路大神指点迷津:
下面两个代码都是对文件进行合并,作用一样,疑问:

Q1:第一句里的if (a[$1])改如何理解呢,如果写成if($0 in a)我就理解了?
Q2:第二句里的length(a[$1])不明白了,是否是作为一个pattern? 或者

awk 'NR==FNR{a[$1]=$0;next}NR>FNR{if (a[$1]) print a[$1]"\t"$2}' 1 2

awk 'NR==FNR{a[$1]=$0;next}length(a[$1]){print a[$1]"\t"$2}' 1 2



谢谢谢谢!!!

打赏鼓励一下!

论坛徽章:
130
技术图书徽章
日期: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
发表于 2018-04-09 23:52 |显示全部楼层
回复 1# SheIsTheOne

Q1: if(Condition)...
  Condition will be false:
  1. 0,  zero of number
  2. "", empty of string
  other case will be true

$ awk 'BEGIN{a=0;if(a)print "true";else print"false"}'
false
$ awk 'BEGIN{a="";if(a)print "true";else print"false"}'
false
$ awk 'BEGIN{a=" ";if(a)print "true";else print"false"}'                # note: " " string               
true
$ awk 'BEGIN{a="0";if(a)print "true";else print"false"}'               # note: "0" string
true


Q2: awk 'pattern{action}pattern{action}...'


awk 'NR==FNR{a[$1]=$0;next}NR>FNR{if (a[$1]) print a[$1]"\t"$2}' 1 2

awk 'NR==FNR{a[$1]=$0;next}length(a[$1]){print a[$1]"\t"$2}' 1 2

论坛徽章:
0
发表于 2018-04-10 09:22 |显示全部楼层
回复 2# jason680

谢谢谢谢,我又搜集了一些信息,结合您的回答,理解思路如下,不知道有没有错误之处:

awk 'NR==FNR{a[$1]=$0;next}NR>FNR{if (a[$1]) print a[$1]"\t"$2}' 1 2

针对这一句,访问第一个文件的时候,建立数组,将每一行作为元素,并且以第一列作为数组的下标;
但是到第二个if (a[$1]) 的时候,这里的a[$1]并不是一个数组,而是通过2文件的下标来访问a数组的元素,如果可以访问,则条件为真。。。即($1 in a)


awk 'NR==FNR{a[$1]=$0;next}length(a[$1]){print a[$1]"\t"$2}' 1 2

这个代码,length(a[$1])起到判断作用,同样是通过2文件的下标来访问a数组的内容,如果可以访问,则length(a[$1])非空,条件为真,,,

不知道这样理解起来对不对

论坛徽章:
0
发表于 2018-04-10 12:38 |显示全部楼层
a[$1]=$0   《-----从前awk给我坑吃
[-f xxx] || xxx  《-----从前shell给我坑吃
他俩都可以,没有姨夫(if),不规范。

我就学了powershell。powershell猪懂傻改。powershell【强】【简】死你。
学了ps,让你从0,到160迈,加速提速,你速度提起来了后,你照样很强。

======================================================
powershell 约等于 bash+python。
powershell和相关开发工具,代表强大的生产力。是脚本编写人员,运维人员的屠龙刀。
linux中的py,web图形强,命令行+运维脚本不如ps方便,
py和py人,可以说不太屌shell脚本,脚本人手握破铜烂铁也很尴尬。直到救世主powershell出现。
【linux运维工程师】,【linux脚本开发人员】,【linux运维开发】职业,应优先招聘powershell for linux的脚本人才。其次才是shell,python人才。
应该主用powershell,并把bash放在角落中,边缘化它。

======================================================
问:目前哪些版本linux能安装上powershell?
答:
◦Windows 10 IoT Core(arm32的cpu,本质上是win,树莓派硬件上的win10)
◦Raspbian Stretch(arm32的cpu,树莓派官方操作系统Raspbian,基于大便,所以叫树莓便。)
◦MAC OS X 10.11
◦Ubuntu 14.04/16.04/17.10
◦Debian8.x/9.x
◦CentOS 7.x/RHEL 7.x/Fedora25/Fedora26/Fedora27
◦open SUSE 42及以上/SUSE Linux Enterprise Server 12 SP2
◦Docker。LINUX发行版中,安装容器dockerd,docker中运行powershell。
◦Arch Linux (archl inux 没有版本号)
◦Linux AppImage 容器(portable application single binary)  https://github.com/probonopd/AppImageKit
◦Kali Linux

安装方法:
https://github.com/PowerShell/Po ... stallation/linux.md


======================================================

论坛徽章:
130
技术图书徽章
日期: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
发表于 2018-04-10 13:14 |显示全部楼层
回复 5# 本友会机友会摄友会


垃圾是放错地方的资源
https://wenku.baidu.com/view/347ebbb31a37f111f1855b19.html

PowerShell的是windows的专有脚本
用在这,肯定放错地方

强简 “死”的是你
http://bbs.chinaunix.net/thread-4263951-1-1.html

论坛徽章:
105
ChinaUnix元老
日期:2015-02-02 08:55:39CU十二周年纪念徽章
日期:2015-02-02 08:55:50双子座
日期:2013-08-20 08:22:52双鱼座
日期:2013-08-20 17:47:58丑牛
日期:2013-09-13 13:10:45水瓶座
日期:2013-09-13 21:15:33寅虎
日期:2013-09-25 11:23:51戌狗
日期:2013-09-26 13:21:25丑牛
日期:2013-09-26 14:23:42亥猪
日期:2013-09-27 17:42:00亥猪
日期:2013-09-27 17:45:14天秤座
日期:2013-09-28 17:20:10
发表于 2018-04-10 13:34 |显示全部楼层
回复 3# SheIsTheOne

这样理解冇问题

论坛徽章:
0
发表于 2018-04-11 12:09 |显示全部楼层
回复 7# Shell_HAT

望指点

论坛徽章:
0
发表于 2018-04-11 14:24 |显示全部楼层
楼主啊,天下大势不可不知,
1ps代码简单,比py更shell。

2ps代码,win linux通用。

3win10世界上有50%左右,中国win10占30%多,win7占40%多。但是win7,2019年底将eol淘汰。
win10中的ps是成熟的,而且熟透了。win7中自带的ps2,用起来不太爽。但可以安装高版本。

4从难道简单,我认为,perl > shell > powershell >python。
py比ps稍微简单。但坑也不少。装机量不行,人家也不主要对shell。

我的结论:
随着win10的带动,
1会ps的人会多起来,
2在linux中用ps的人会多起来。
3赶脚linux版ps,比linux版shell好吃的人,会多起来。
4长江后浪退前浪,powershell=开源+免费+linux。
5曰【垃圾,放错地方】,在某种程度上,jason680是开源软件的绊脚石。

应该去除偏见!
应该允许任何人(或组织)开源!
不论谁给开源贡献力量你都应该支持,点赞!


任何开源免费,都相当于 白捡钱。powershell的开源免费,更相当于白捡shell的屠龙刀!

论坛徽章:
16
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:0915-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:4215-16赛季CBA联赛之深圳
日期:2018-05-04 21:53:0815-16赛季CBA联赛之辽宁
日期:2018-04-02 14:03:3915-16赛季CBA联赛之北京
日期:2018-03-23 15:24:07
发表于 2018-04-11 14:36 |显示全部楼层
本帖最后由 wh7211 于 2018-04-11 14:45 编辑

回复 3# SheIsTheOne


这里的a[$1]并不是一个数组,而是通过2文件的下标来访问a数组的元素

a[$1]是在第1个文件中定义的,即a[$1]=$0。在处理第2个文件时,if(a[$1])的意思是“判断a[$1]的值是否为真”,如果文件2的$1在文件1中出现过则a[$1]为真,那么就执行后面的print指令
length(a[$1])起到判断作用,同样是通过2文件的下标来访问a数组的内容

这里的length(a[$1])是模式,返回值是a[$1]数组的长度,如果文件2的$1在文件1中出现过则length(a[$1])的返回值为真,那么就执行后面的print指令

论坛徽章:
18
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06IT运维版块每日发帖之星
日期:2016-02-27 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-31 10:37:3615-16赛季CBA联赛之同曦
日期:2016-01-24 17:51:44
发表于 2018-04-11 15:24 |显示全部楼层
回复 9# 本友会机友会摄友会

linux 下 ps 代码不会火起来的,放心吧  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP