Shell awk文本处理,shell脚本编写

Shell awk文本处理,shell脚本编写

一:内容包含awk、变量、运算符、if多分支

<a>语法糖:
awk [options] 'commands' files
option
  -F  定义字段分隔符,默认的分隔符是连续的空格或制表符
     使用option中的-F参数定义间隔符号
     用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域
     NF变量表示当前记录的字段数
  -v  定义变量并赋值 也可以借用次方式从shell变量中引入

command

<b>读前处理 行处理 读后处理:
  1.读前处理 BEGIN{awk_cmd1;awk_cmd2}
  2.行处理:定址 命令 
  定址方法: 正则,变量,比较和关系运算
<c>正则需要用//包围起来 
    ^ 行首
    $ 行尾
    . 除了换行符以外的任意单个字符
    * 前导字符的零个或多个
    .* 所有字符
    [] 字符组内的任一字符
    [^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
    ^[^] 非字符组内的字符开头的行
    [a-z] 小写字母
    [A-Z] 大写字母
    [a-Z] 小写和大写字母
    [0-9] 数字
    \< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
    \> 单词尾

<d>扩展正则 加 -r 参数 或转义
  sed -n '/roo\?/p' /etc/passwd 
  sed -rn '/roo?/p' /etc/passwd
  ? 前导字符零个或一个
  + 前导字符一个或多个
  abc|def abc或def
  a(bc|de)f abcf 或 adef
  x\{m\} x出现m次
  x\{m,\} x出现m次至多次(至少m次)
  x\{m,n\} x出现m次至n次

<e>NR变量定址 

  NR 表示AWK读入的行数
  FNR表示读入行所在文件中的行数
  # awk '{print NR,FNR,$1}' file1 file2 
    1 1 aaaaa
    2 2 bbbbb
    3 3 ccccc
    4 1 dddddd
    5 2 eeeeee
    6 3 ffffff
    #
  逻辑运算 可直接引用域进行运算
    == >= <= != > < ~ !~
    # awk 'NR==1 {print}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    # 
  3.命令 {print $0}
  4.读后处理 END {awk_cmd1;awk_cmd2;}
<f>AWK变量
  NR 当前记录的个数(全部文件连接后的统计) 
  FNR 当前记录的个数(仅为当前文件的统计,非全部)
  FS 字段分隔符 默认为连续空格或制表符,可以使用多个不同的符号做分隔符 -F[:/]
  OFS 输出字符的分隔符 默认是空格
  # awk -F: 'OFS="=====" {print $1,$2}' /etc/passwd
  root=====x
  NF 当前读入行的字段个数
  ORS 输出记录分隔符 默认是换行
  # awk -F: 'ORS="=====" {print $1,$2}' /etc/passwd
  root x=====bin x=====
  FILENAME 当前文件名

  引用shell变量的方法
  # a=root
  # awk -v var=$a -F: '$1 == var {print $0}' /etc/passwd
  或者 把整个命令拆开传递,让shell变量外露,
  # awk -F: '$1 == "'$a'" {print $0}' /etc/passwd
  # a=NF
  # awk -F: '{print $'$a'}' /etc/passwd 

操作符
  赋值
    = += -= /= *= 
  逻辑与 逻辑或 逻辑非
    && || !
  匹配正则或不匹配,正则需要用 /正则/ 包围住
    ~ !~
  关系 比较字符串时要把字符串用双引号引起来
    < <= > >= != ==
  字段引用
    $ 字段引用需要加$,而变量引用直接用变量名取
运算符
  + - * / % ++ --
  转义序列
  \\ \自身
  \$ 转义$
  \t 制表符
  \b 退格符
  \r 回车符
  \n 换行符
  \c 取消换行

# awk -F: '{if ($1 == "root") print $1;else if ($1 == "seker") print $6;else if ($1 == "zorro") print $7;else print NR}' /etc/passwd
root
2
3
...
33
/home/seker
/bin/bash
36条件 ? 动作1 : 动作2
expr?action1:action2
# awk -F: 'var=($3 >= 500)?$1:"system_user" {print $1"\t"$3"\t"var}' /etc/passwd
# awk -F: '{print ($3>500?$1:$2)}' /etc/passwd

  

常用系统变量 

  PATH
  PWD
  LANG
  HOME
  HISTSIZE
  PS1
  IFS
域分隔符 是空格,换行,TAB键的合集

算术运算符

  +

  -

  *

  /

  %

[root@MiWiFi-R3-srv ~]# echo $[3+1]
            输出结果:4

part2 关系操作

  < 

  > 

  <=

  >=

  ==

  !=

  &&

  ||

[root@MiWiFi-R3-srv ~]# 
[root@MiWiFi-R3-srv ~]# x=1
[root@MiWiFi-R3-srv ~]# [ $x -gt 1 ]
[root@MiWiFi-R3-srv ~]# echo $?
            0

part3 赋值运算符

  =

  +=

  *=

  /=

  %=

#!/bin/bash

var='/etc/init.d'

#var='/dev/sda'

if多分支

if (条件) 动作
若有多个动作,则要用大括号将动作体包含起来 if (条件) {动作1;动作2}
  # awk -F: '{if ($1 == "root") print $1}' /etc/passwd
  root
  # 
  # awk -F: '{if ($1 == "root") {print $1;print $6}}' /etc/passwd
  root
  /root
  #

if (条件1)
动作1
  else
动作2
  # awk -F: '{if ($1 == "root"){print $1}else print $6}' /etc/passwd
  # awk -F: '{if ($1 == "root") print $1;else print $6}' /etc/passwd
上面两个命令是等价的,要么用分号隔开,表示第一个动作体的结束,要么将动作体用大括号定位范围
  if (条件 1)
动作1
  else if(条件 2)
动作2
  else if(条件 3)
动作3
  else
动作4
  # awk -F: '{if ($1 == "root") print $1;else if ($1 == "seker") print $6;else if ($1 == "zorro") print $7;else print NR}' /etc/passwd
  root
  2
  3
  ...
  33
  /home/seker
  /bin/bash
  36

条件 ? 动作1 : 动作2

expr?action1:action2
# awk -F: 'var=($3 >= 500)?$1:"system_user" {print $1"\t"$3"\t"var}' /etc/passwd
# awk -F: '{print ($3>500?$1:$2)}' /etc/passwd

if [ -d $var ]thenecho "$var is directory"elif [ -b $var ]thenecho "$var is block"elif [ -f $var ]thenecho "$var is regular file"elseecho 'unknow'fi

  

 

二:awk文本处理

打印uid在30~40范围内的用户名。
  awk -F: '$3 >=30 &&  $3<=40 {print $1}' passwd 
打印第5-10行的行号和用户名
  awk -F: 'NR>=5 && NR<=10{print NR,$1}' passwd 
打印奇数行
  [root@python_lb yan]# awk -F: '{if(NR%2==1) print $0}' passwd 
打印偶数行
  [root@python_lb yan]#awk -F: '{if(NR%2==0) print $0}' passwd 
打印字段数大于5的行
  [root@python_lb yan]# awk -F: 'NF>5{print $0}' passwd 
打印UID不等于GID的用户名
  awk -F: '$3!=$4{print $1}' passwd 
打印没有指定shell的用户
   awk -F: '$7==""{print $1}' passwd 

三:shell脚本编写
自动部署、初始配置、并启动nginx反向代理服务

systemctl stop firewalld.service
setenforce 0 
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux 
iptables -F
yum install -y epel-release
yum install -y nginx 
systemctl start nginx.service 
监控脚本:监控每台机器的内存使用率>70%,则输出报警信息
(思路提示:
[root@www ~]# ((80>70))
[root@www ~]# echo $?
0

#!/bin/bash
mem_total=`free |awk 'NR==2{print $2}'`
mem_userd=`free|awk 'NR==2{print $3}'`
mem_per=`echo "scale=2;${mem_userd}/${mem_total}"|bc -l|cut -d. -f2`
if [ $mem_per -gt 70 ]
then 
     echo "警报信息"
else
      echo "正常"
fi 

 

         )

 

 

转载于:https://www.cnblogs.com/xuaijun/p/6605610.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当超级智能崛起时……

来源&#xff1a;资本实验室“大雷&#xff0c;你脑子没出啥毛病吧&#xff1f;”李春花轻声问道&#xff0c;眼睛里满是关切的神色。“喔&#xff0c;你放心&#xff0c;俺没事&#xff01;上次的事故之后&#xff0c;我的芯片和操作系统都已经升级到最新版本啦&#xff01;”…

小米小爱音箱Pro8安装app_小米小爱音箱HD获DXO评为第二!低音准确度很高

前几天&#xff0c;知名评测机构DXOMARK公布了用于测试无线音箱音质的新基准——DXOMARK Speaker。据了解&#xff0c;这个基准由百个测试汇集而成&#xff0c;该机构称这个基准为针对音箱产品唯一的科学评分。11月9日&#xff0c;该机构发文称&#xff0c;小米小爱音箱HD获得了…

Android自定义组合布局,Android 流式布局 + 自定义组合控件

自定义组合控件package yanjupeng.bawei.com.day09.two;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.widget.EditText;import android.widget.Lin…

freemark循环map_freemarker中循环map根据key值得value 报错

[#list uMap?keys as key]${uMap[key]}[/#list]Map uMap new HashMap();uMap.put(1,"zhangsan");uMap.put(2,"lisi");model.addAttribute("uMap", uMap);严重: Servlet.service() for servlet springMVC threw exceptionFreeMarker template e…

Lua的垃圾回收机制详解

Lua 是一种轻量级的编程语言&#xff0c;广泛用于嵌入到其他应用程序中&#xff0c;尤其是在游戏开发领域。Lua 的内存管理机制采用了自动垃圾收集&#xff08;Garbage Collection&#xff09;的方法。以下是Lua内存管理的一些关键方面&#xff1a; 垃圾收集原理概述 Lua 使用…

2020年AI怎么发展?听加州大学、谷歌、英伟达、IBM怎么说

来源&#xff1a;机器之心AI 领域最杰出的头脑如何总结 2019 年技术进展&#xff0c;又如何预测 2020 年发展趋势呢&#xff1f;本文介绍了 Soumith Chintala、Celeste Kidd、Jeff Dean 等人的观点。人工智能不是将要改变世界&#xff0c;而是正在改变世界。在新年以及新的十年…

python线程池官网-Python线程池下载txt

下次试试用scrapy模块 # codingutf-8 import requests import threadpool def download_file(i): """下载文件""" download_url f"https://www.txt2016.com/e/DownSys/xiazai/?classid1&pathid0&id{i}" file requests.get(…

select样式的重写

select {/*统一边框*/border: solid 1px #000;/*将默认的select选择框样式清除*/appearance:none;//这个样式就是清楚他的下拉按钮的默认样式-moz-appearance:none;-webkit-appearance:none;/*替换选择框的最右侧显示小箭头图片*/background: url("http://****.png")…

ip打包后如何加入 xilinx_科普!插上USB设备后电脑是怎么识别的呢?

欢迎FPGA工程师加入官方微信技术群每次当插上鼠标或者U盘的时候&#xff0c;电脑是怎么知道是什么设备的呢&#xff1f;这里用到的就是枚举了。枚举&#xff0c;其实就是让HOST认识这个USB涉笔&#xff0c;并且为该设备准备资源&#xff0c;建立好主机和设备之间的数据传递机制…

两院院士评选2019年中国、世界十大科技进展新闻揭晓

来源&#xff1a;科学网由中国科学院、中国工程院主办&#xff0c;中国科学院学部工作局、中国工程院办公厅、中国科学报社承办&#xff0c;中国科学院院士和中国工程院院士投票评选的2019年中国十大科技进展新闻、世界十大科技进展新闻&#xff0c;1月11日在京揭晓。此项年度评…

android炫酷叼ui,XUI: 一个简洁而优雅的Android原生UI框架,解放你的双手!

XUI一个简洁而又优雅的Android原生UI框架&#xff0c;解放你的双手&#xff01;还不赶紧点击使用说明文档&#xff0c;体验一下吧&#xff01;涵盖绝大部分的UI组件&#xff1a;TextView、Button、EditText、ImageView、Spinner、Picker、Dialog、PopupWindow、ProgressBar、Lo…

笔记本电脑麦克风在哪里_定制款MacBook Pro? 13.3 体验 “旧”时代的 One Pecie_笔记本电脑...

2020-11-11 13:19:377点赞18收藏18评论9月28日 - 11月12日&#xff0c;参与#双11购物攻略#征稿活动&#xff0c;赢取苹果全家桶8888元超级锦鲤大奖&#xff01;瓜分十万金币&#xff0c;值得买周边一次全攒齐&#xff01;品类、品牌、场景、价格&#xff0c;快来分享你的购物心…

android 拍照屏幕大小,Android Camera 找出屏幕的最佳尺寸大小

大家平时都会调用到Camera 这个API&#xff0c;在设置Camera.Paramera的参数的时候&#xff0c;有一个预览大小。也就是&#xff1a;setPreviewSize(int width, ing height)这个相机的大小不能随便设置&#xff0c;如果设置了不可接受的值&#xff0c;程序会崩溃掉。现在给大家…

Shell脚本-自动化部署反向代理、WEB、nfs

部署nginx反向代理三个web服务&#xff0c;调度算法使用加权轮询(由于物理原因只开启两台服务器) AutoNginxNfsService.sh #/bin/bash systemctl status nginx if(($?4))then yum install -y nginxif(($?0))then#echo Yes!systemctl start nginxif(($?0))thenecho "Con…

a76比a73强多少_arm的a73和a72同上10nm,谁强?

说到ARM A72和A73 就不得不说一个事&#xff0c;A73相比A72并不是一个简单的升级&#xff0c;A72和A73不是同一个团队做的。A73其实有点像当初的A17&#xff0c;整体微架构、流水线、宽度设计都与之类似。A73和A72相比没有保留A72的三发射&#xff0c;改用了双发射。ARM的宣传A…

杨振宁眼中的物理学之美

来源&#xff1a;EETOP本文是当代物理学大师杨振宁教授1997年1月17日在香港中华科学与社会协进会与香港中文大学主办的演讲会上的演讲词&#xff0c;讲题原为“科学工作有没有风格”。转载于香港《二十一世纪》杂志1997 年 4 月号&#xff0c;总第40期&#xff1b;也收入杨振宁…

wechat电脑版_【学术工具】如何快速、免费翻译英文材料?原创·WeChat公号:本硕博资讯...

★学术工具英文材料免费翻译如何快速、免费翻译英文材料&#xff1f;原创WeChat公号&#xff1a;本硕博资讯分享一些亲测可用的资源&#xff0c;仅用于学术交流。建议大家试着自己翻译&#xff0c;提升英语水平。版权声明&#xff1a;如有侵权问题请通过邮箱或者公众号后台私信…

float php 运算_系统的讲解 - PHP 浮点数高精度运算

概述记录下&#xff0c;工作中遇到的坑 ...关于 PHP 浮点数运算&#xff0c;特别是金融行业、电子商务订单管理、数据报表等相关业务&#xff0c;利用浮点数进行加减乘除时&#xff0c;稍不留神运算结果就会出现偏差&#xff0c;轻则损失几十万&#xff0c;重则会有信誉损失&am…

20155234 2016-2017-2 《Java程序设计》第5周学习总结

20155234 2016-2017-2 《Java程序设计》第5周学习总结 教材学习内容总结 Java中所有错误都会被打包为对象&#xff0c;运用try、catch&#xff0c;可以在错误发生时显示友好的错误信息。运用try、catch&#xff0c;还可以在捕捉处理错误之后&#xff0c;尝试恢复程序正常执行流…

harmonyos 编译打包生成app,鸿蒙(HarmonyOS)App开发入门(2)—运行HelloWorld

前言为确保HarmonyOS应用的完整性&#xff0c;HarmonyOS通过数字证书和授权文件来对应用进行管控&#xff0c;只有签名过的HAP(编译产物&#xff0c;后面章节详细讲述&#xff0c;本章主要讲证书申请到代码运行到真机)才允许安装到设备上进行运行(如果不带签名信息&#xff0c;…