首页 文章 精选 留言 我的

精选列表

搜索[文档处理],共10000篇文章
优秀的个人博客,低调大师

Linux高级文本处理之gawk变量的操作符(三)

一、变量 Awk 变量以字母开头,后续字符可以是数字、字母、或下划线。关键字不能用作 awk 变量。awk 变量可以直接使用而不需事先声明。 如果要初始化变量,最好在BEGIN 区域内做,它只会执行一次。Awk 中没有数据类型的概念,一个 awk 变量是 number 还是 string 取决于该变量所处的上下文。 实例1:使用”total”便是用户建立的用来存储公司所有雇员工资总和的变量。 [root@localhost~]#catemp4 101,JohnDoe,CEO,10000 102,JasonSmith,ITManager,5000 103,RajReddy,Sysadmin,4500 104,AnandRam,Developer,4500 105,JaneMiller,SalesManager,3000 [root@localhost~]#catemp.awk BEGIN{ FS=","; total=0; } { print$2"'ssalaryis:"$4; total=total+$4; } END{ print"---\nTotalcompanysalary=$"total; } [root@localhost~]#awk-femp.awkemp4 JohnDoe'ssalaryis:10000 JasonSmith'ssalaryis:5000 RajReddy'ssalaryis:4500 AnandRam'ssalaryis:4500 JaneMiller'ssalaryis:3000 --- Totalcompanysalary=$27000 awk自定义变量的方法: 1.借助-v选项,可以将外部值(并非来自stdin)传递给awk 实例2: [root@localhost~]#awk-vvar="young"'BEGIN{printvar,"\n","---"}{printvar}'./num young --- young young young 2.通过VAR=value的方式定义 实例3: [root@localhost~]#awk'{printv1,v2}'v1="young"v2="geek"./num younggeek younggeek younggeek 二、一元操作符 1.取正取反 只接受单个操作数的操作符叫做一元操作符。 实例1:取反操作 [root@localhost~]#catemp4 101,JohnDoe,CEO,10000 102,JasonSmith,ITManager,5000 103,RajReddy,Sysadmin,4500 104,AnandRam,Developer,4500 105,JaneMiller,SalesManager,3000 [root@localhost~]#awk-F,'{print-$4}'emp4 -10000 -5000 -4500 -4500 -3000 注意:取反只对数值类数据生效,字符串取反结果全部为0. 实例2: [root@localhost~]#catnum -1 -2 -3 [root@localhost~]#awk'{print+$1}'num -1 -2 -3 [root@localhost~]#awk'{print-$1}'num 1 2 3 2.自增自减 VAR1=++VAR或者VAR1=--VAR,表示VAR先增加或者减去1再赋值给VAR1,VAR1=VAR++或VAR1=VAR--,表示先将VAR赋值给VAR1,VAR再增减或者减去1. 实例1:前自加子减 [root@localhost~]#awk-F,'{print++$4}'emp4#前自加 10001 5001 4501 4501 3001 [root@localhost~]#awk-F,'{print--$4}'emp4#前自减 9999 4999 4499 4499 实例2:后自加子减 [root@localhost~]#awk-F,'{$4--;print$4}'emp4#后自减 9999 4999 4499 4499 2999 [root@localhost~]#awk-F,'{$4++;print$4}'emp4#后自加 10001 5001 4501 4501 3001 实例3:打印所有可登陆 shell 的用户总数: [root@localhost~]#awk-F':' >'$NF~/\/bin\/bash/{n++} >END{printn}'/etc/passwd 10 [root@localhost~]#grep-c'/bin/bash$'/etc/passwd 10 实例4: [root@localhost~]#catnum 1 2 1 1 3 4 2 [root@localhost~]#awk'/1/{printNF}'num 1 1 1 [root@localhost~]#awk'/1/{n++}END{printn}'num 3 [root@localhost~]#awk'/2/{n++}END{printn}'num 2 [root@localhost~]#awk'/3/{n++}END{printn}'num 1 [root@localhost~]#awk'/4/{n++}END{printn}'num 1 三、算术运算符 需要两个操作数的操作符,成为二元操作符。 Awk 中有多种基本二元操作符(如算术操作符、 字符串操作符、赋值操作符,等等)。 实例1:将每件单独的商品价格减少 20% 并且将每件单独的商品的数量减少 1 [root@localhost~]#catitems.txt 101,HDCamcorder,Video,210,10 102,Refrigerator,Appliance,850,2 103,MP3Player,Audio,270,15 104,TennisRacket,Sports,190,20 105,LaserPrinter,Office,475,5 [root@localhost~]#catdis.awk BEGIN{ FS=","; OFS=","; discount=0 } { discount=$4*20/100; print$1,$2,$3,$4-discount,$5-1 } [root@localhost~]#awk-fdis.awkitems.txt 101,HDCamcorder,Video,168,9 102,Refrigerator,Appliance,680,1 103,MP3Player,Audio,216,14 104,TennisRacket,Sports,152,19 105,LaserPrinter,Office,380,4 实例2:只打印偶数行 [root@localhost~]#awk'NR%2==0'items.txt 102,Refrigerator,Appliance,850,2 104,TennisRacket,Sports,190,20 四、字符串操作符 (空格)是连接字符串的操作符。 实例1: [root@localhost~]#catstr.awk BEGIN{ FS=","; OFS=","; str1="Audio"; str2="Video"; nustr="100"; str3=str1str2; print"Concatenatestringis:"str3; nustr=nustr+1; print"Strtonu:"nustr; } [root@localhost~]#awk-fstr.awkitems.txt Concatenatestringis:AudioVideo Strtonu:101 四、赋值操作符 实例1: [root@localhost~]#catfz.awk BEGIN{ FS=","; OFS=","; total1=total2=total3=total4=total5=10; total1+=5;printtotal1; total2-=5;printtotal2; total3*=5;printtotal3; total4/=5;printtotal4; total5%=5;printtotal5; } [root@localhost~]#awk-ffz.awkitems.txt 15 5 50 2 0 实例2:打印商品清单 [root@localhost~]#catitems.txt 101,HDCamcorder,Video,210,10 102,Refrigerator,Appliance,850,2 103,MP3Player,Audio,270,15 104,TennisRacket,Sports,190,20 105,LaserPrinter,Office,475,5 [root@localhost~]#awk-F,' >BEGIN{total=0}{total+=$5} >END{print"TotalQutantity:"total}'items.txt TotalQutantity:52 五、比较操作符 实例1:打印数量小于等于临界值 5 的商品信息 [root@localhost~]#awk-F,'$5<=5'items.txt 102,Refrigerator,Appliance,850,2 105,LaserPrinter,Office,475,5 实例2:打印编号为 103 的商品信息 [root@localhost~]#awk-F,'$1==103'items.txt 103,MP3Player,Audio,270,15 实例3:打印除 Video 以外的所有商品 [root@localhost~]#awk-F,'$3!="Video"'items.txt 102,Refrigerator,Appliance,850,2 103,MP3Player,Audio,270,15 104,TennisRacket,Sports,190,20 105,LaserPrinter,Office,475,5 实例4:同实例3,但只打印描述信息 [root@localhost~]#awk-F,'$3!="Video"{print$2}'items.txt Refrigerator MP3Player TennisRacket LaserPrinter 实例5:打印价钱低于 900 或者数量小于等于临界值 5 的商品信息 [root@localhost~]#awk-F,'$5<=5||$4<900'items.txt 101,HDCamcorder,Video,210,10 102,Refrigerator,Appliance,850,2 103,MP3Player,Audio,270,15 104,TennisRacket,Sports,190,20 105,LaserPrinter,Office,475,5 实例6:打印/etc/password 中最大的 UID(以及其所在的整行)。 [root@localhost~]#awk-F':'' >$3>maxuid >{maxuid=$3;maxline=$0} >END{printmaxuid,maxline}'/etc/passwd 1009user3:x:1009:1010::/home/user3:/bin/bash 实例8:打印/etc/passwd 中 UID 和 GROUP ID 相同的用户信息 [root@localhost~]#awk-F':''$3==$4'/etc/passwd root:x:0:0:young,geek,010110110,0101101101:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:Systemmessagebus:/:/sbin/nologin vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin 实例9:打印/etc/passwd 中 UID >= 100 并且用户的 shell 是/bin/sh 的用户 [root@localhost~]#awk-F:'$3>=100&&$7=="/bin/sh"'/etc/passwd user1:x:800:800:testuser:/none:/bin/sh 或者: [root@localhost~]#awk-F':''$3>=100&&$NF~/\/bin\/sh/'/etc/passwd user1:x:800:800:testuser:/none:/bin/sh#正则表达式模式匹配 实例10:打印/etc/passwd 中没有注释信息(第 5 个字段)的用户 [root@localhost~]#awk-F:'$5==""'/etc/passwd abrt:x:173:173::/etc/abrt:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin sys:x:498:1001::/home/sys:/bin/bash natasha:x:1006:1007::/home/natasha:/bin/bash harry:x:1007:1008::/home/harry:/bin/bash sarah:x:497:497::/home/sarah:/bin/nologin 实例11:使用取反(!)运算符打印奇数行 [root@localhost~]#seq10|awk'i=!i' 1 3 5 7 9 实例12:打印偶数行 [root@localhost~]#seq10|awk-vi=1'i=!i' 2 4 6 8 10 六、正则表达式操作符 实例1: [root@localhost~]#catitems.txt 101,HDCamcorder,Video,210,10 102,Refrigerator,Appliance,850,2 103,MP3Player,Audio,270,15 104,TennisRacket,Sports,190,20 105,LaserPrinter,Office,475,5 [root@localhost~]#awk-F,'$2=="Tennis"'items.txt#精确匹配 [root@localhost~]#awk-F,'$2~"Tennis"'items.txt#模糊匹配 104,TennisRacket,Sports,190,20 实例2: [root@localhost~]#awk-F,'$2!~"Tennis"'items.txt#不匹配 101,HDCamcorder,Video,210,10 102,Refrigerator,Appliance,850,2 103,MP3Player,Audio,270,15 105,LaserPrinter,Office,475,5 实例3:打印 shell 为/bin/bash 的用户的总数,如果最后一个字段包含”/bin/bash”,则变量n 增加 1 [root@localhost~]#grep-c'/bin/bash'/etc/passwd 9 [root@localhost~]#awk-F:'$NF~/\/bin\/bash/{n++}END{printn}'/etc/passwd 9 补充说明: awk PATTERN模式的其他形式: empy:空模式,匹配所有行 关系表达式,表达式结果非0为真,则执行后面body中语句;0则为假,不执行。例如 awk-F:'$3>=500{print$1,$3}'/etc/passwd 3.行范围,类似sed或vim中的地址定界: /startpattern/,/endpattern/ 注意:不支持直接给出数字格式 实例: [root@localhost~]#awk'/^root/,/^mail/{print$0}'/etc/passwd root:x:0:0:young,geek,010110110,0101101101:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

优秀的个人博客,低调大师

关于Exchange Server 2010 启用邮箱时MMC控制台崩溃问题处理

最近有小伙伴咨询问题,关于对已有的AD帐号启用邮箱功能时,EMC控制台崩溃,并提示如下界面显示,反复操作都是无法创建,一直崩溃,那么我们先来看看这个EMC控制台引出的MMC控制台报错。当然这时会有一个疑问为什么EMC崩溃时会显示的是MMC控制台呢?这个好理解,因为EMC其实也是建立在MMC基础上的哦。 OK,我们现在来重现一下这个报错场景,跟我来: 首先,创建一个用于批量创建帐号的CSV文件,格式内容如下: 接下来,我们执行PowerShell,运行创建帐号脚本: 命令执行后,没有报错,这时可以通过AD控制台看到,小高也已经创建出来了 来看看小高的帐号属性,可以看到已经创建好帐号了。 好,接下来去EMC控制台通过GUI方式来启用帐号邮箱,这时我们可以看到,小伙伴反馈的问题重现了。 好,报错场景重现成功了,那么我们来一起看看这个问题原因: 首先:先通过PowerShell命令行看看这个帐号创建完成的属性,哦?来看看,有意思的事情出现啦,CN名后带有斜杠?也不知道这是不是百年难见的一幕…….,反正我是看到了……. 那我们就不得不对CN属性有所怀疑了…CSV中并没有CN字段设置,那我们先来看看xiaogao这个帐号的完整属性输出值,找找看是什么原因吧…执行如下PowerShell命令并输出。 来来来,各位看官,我们一起看看这输出的属性都有什么不同?和正常的,当然前提你需要知道CN的属性来自于谁呀,来自于Name,然后被展现在DistinguishedName,知道了这些,那么我们着重看Name属性就好了,接着上图,请欣赏@_@ 从上图来看,这帐号竟然有空格?师傅,这货输出有空格,有空格,有空格….(重要的事情说三遍!) 哦,看来这个图很有意思嘛,我们用同样方法输出来看一个正确的帐号属性中Name和这帐号有什么区别? 哦,难道是多了一个空格导致的?先不要着急嘛,来再验证一下。 打开Exchange Server 2010 PowerShell控制台,执行如下命令修改Name值为不带空格的,设置方法就是下边红框标识的地方哦。 接下来,通过Powershell查看修改结果,如下图所示 执行完成Name修改后,从上图输出结果来看CN值已经显示正确了,接着来看看Name值中是不是已经把空格去掉了。 这时再去通过EMC控制台启用邮箱,就不再报错啦,如下图所示: 这篇博客也只是介绍了一下排错的思路,但是还是得注意这跑脚本是方便,可也要多些细心,执行前把多余的空格去掉,这样也不会出现莫名其妙的报错了。

优秀的个人博客,低调大师

处理基本都是容器满了

27 15:15:34 localhost docker-storage-setup: Volume group "centos" has insufficient free space (0 extents): 66 required. Apr 27 15:15:34 localhost systemd: docker-storage-setup.service: main process exited, code=exited, status=5/NOTINSTALLED Apr 27 15:15:34 localhost systemd: Failed to start Docker Storage Setup. Apr 27 15:15:34 localhost systemd: Unit docker-storage-setup.service entered failed state. Apr 27 15:15:34 localhost systemd: docker-storage-setup.service failed. Apr 27 15:15:34 localhost systemd: Starting Docker Application Container Engine... Apr 27 15:15:34 localhost journal: Forwarding stdin to journald using Priority Informational and tag docker Apr 27 15:15:35 localhost kernel: loop: module loaded Apr 27 15:15:38 localhost journal: time="2016-04-27T15:15:38.376521502+08:00" level=warning msg="Usage of loopback devices is strongly discouraged for production use. Please use `--storage-opt dm.thinpooldev` or use `man docker` to refer to dm.thinpooldev section." Apr 27 15:15:38 localhost systemd: Device dev-disk-by\x2duuid-81caf5ff\x2dd883\x2d45a2\x2db20c\x2d31a41d07ad2c.device appeared twice with different sysfs paths /sys/devices/virtual/block/loop0 and /sys/devices/virtual/block/dm-4 Apr 27 15:15:38 localhost journal: time="2016-04-27T15:15:38.571170482+08:00" level=info msg="[graphdriver] using prior storage driver \"devicemapper\"" Apr 27 15:15:38 localhost journal: time="2016-04-27T15:15:38.572029145+08:00" level=warning msg="Docker could not enable SELinux on the host system" Apr 27 15:15:46 localhost kernel: Bridge firewalling registered Apr 27 15:15:46 localhost journal: time="2016-04-27T15:15:46.069579911+08:00" level=warning msg="Running modprobe bridge br_netfilter failed with message: modprobe: WARNING: Module br_netfilter not found.\ninsmod /lib/modules/3.10.0-229.4.2.el7.x86_64/kernel/net/llc/llc.ko \ninsmod /lib/modules/3.10.0-229.4.2.el7.x86_64/kernel/net/802/stp.ko \ninsmod /lib/modules/3.10.0-229.4.2.el7.x86_64/kernel/net/bridge/bridge.ko \n, error: exit status 1" Apr 27 15:15:46 localhost kernel: nf_conntrack version 0.5.0 (16384 buckets, 65536 max) Apr 27 15:15:46 localhost journal: time="2016-04-27T15:15:46.118260335+08:00" level=info msg="Firewalld running: false" Apr 27 15:15:46 localhost journal: time="2016-04-27T15:15:46.366809062+08:00" level=fatal msg="Error starting daemon: Error initializing network controller: could not delete the default bridge network: network bridge has active endpoints" Apr 27 15:15:46 localhost systemd: Started Docker Application Container Engine. Apr 27 15:16:01 localhost systemd: Started Session 9 of user root. Apr 27 15:16:01 localhost systemd: Starting Session 9 of user root. Apr 27 15:17:01 localhost systemd: Started Session 10 of user root. Apr 27 15:17:01 localhost systemd: Starting Session 10 of user root. Apr 27 15:18:01 localhost systemd: Started Session 11 of user root. Apr 27 15:18:01 localhost systemd: Starting Session 11 of user root. Apr 27 15:19:01 localhost systemd: Started Session 12 of user root. Apr 27 15:19:01 localhost systemd: Starting Session 12 of user root. Apr 27 15:20:01 localhost systemd: Started Session 13 of user root. Apr 27 15:20:01 localhost systemd: Starting Session 13 of user root. Apr 27 15:20:18 localhost systemd: Starting Docker Storage Setup... Apr 27 15:20:18 localhost docker-storage-setup: Rounding up size to full physical extent 264.00 MiB Apr 27 15:20:18 localhost docker-storage-setup: Volume group "centos" has insufficient free space (0 extents): 66 required. Apr 27 15:20:18 localhost systemd: docker-storage-setup.service: main process exited, code=exited, status=5/NOTINSTALLED Apr 27 15:20:18 localhost systemd: Failed to start Docker Storage Setup. Apr 27 15:20:18 localhost systemd: Unit docker-storage-setup.service entered failed state. Apr 27 15:20:18 localhost systemd: docker-storage-setup.service failed. OPTIONS='--selinux-enabled=false --graph=/home/lib/docker' 解决,但是没有以前的镜像文件了 ------------------------------------------------------------------------------ cd /var/lib sudo cp -rf docker docker.bak sudo cp -rf docker /<my_new_location>/ sudo ln -s /<my_new_location>/docker docker sudo /etc/init.d/docker start 5、docker无法启动,原因有可能磁盘不够,或者没有解析到。 Nov 19 20:29:36 centos7 systemd: Starting Docker Storage Setup... Nov 19 20:29:36 centos7 docker-storage-setup: Rounding up size to full physical extent 32.00 MiB Nov 19 20:29:36 centos7 docker-storage-setup: Volume group "centos_centos7" has insufficient free space (0 extents): 8 required. Nov 19 20:29:36 centos7 systemd: docker-storage-setup.service: main process exited, code=exited, status=5/NOTINSSTALLED Nov 19 20:29:36 centos7 systemd: Failed to start Docker Storage Setup. Nov 19 20:29:36 centos7 systemd: Unit docker-storage-setup.service entered failed state. Nov 19 20:29:36 centos7 systemd: Starting Docker Application Container Engine... Nov 19 20:29:36 centos7 docker: time="2015-11-19T20:29:36.538243264+08:00" level=info msg="Listening for HTTP on unix (/var/run/docker.sock)" Nov 19 20:29:36 centos7 docker: time="2015-11-19T20:29:36.540394247+08:00" level=error msg="WARNING: No --storage-opt dm.thinpooldev specified, using loopback; this configuration is strongly discouraged for production use" 解决办法: 增加vg容量,重启机器试试 不行就删除 /usr/lib/systemd/system/docker.service 里的DOCKER_STORAGE_OPTIONS systemctl daemon-reload systemctl restart docker.service 6、还是无法启动docker,原因可能为docker没有识别到正常的thinpooldev,需要手动指定 Error starting daemon: error initializing graphdriver: EOF /usr/bin/docker daemon --selinux-enabled --storage-driver devicemapper --storage-opt dm.fs=xfs --storage-opt dm.thinpooldev=/dev/mapper/centos_centos7-docker--pool-tpool 解决办法: https://gist.github.com/joshix/ec1673f2791bf5cb352f#file-thin-pool-md dmsetup status 找到tpool结尾的那行,比如centos_centos7-docker--pool-tpool 修改文件 vim /etc/sysconfig/docker-storage DOCKER_STORAGE_OPTIONS=--storage-driver devicemapper --storage-opt dm.fs=xfs --storage-opt dm.thinpooldev=/dev/mapper/centos_centos7-docker--pool-tpool 重启 systemctl daemon-reload systemctl restart docker.service

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册