Linux中Shell脚本--awk的用法

语法格式:awk [选项] ‘指令’ 操作文件

常用选项:-F 指定分隔符,分隔符用""引起来

-v:var=value在awk程序开始之前指定一个值valu给变量var,这些变量值用于awk程序的BEGIN快

-f:后面跟一个保存了awk程序的文件,代替在命令行指定awk程序

实例1:在命令行直接输入awk指令

awk '{print}' 1.txt  #逐行读取文件1.txt内容并打印

img

awk '{print $0}' 1.txt #逐行读取文件内容,并打印该行,$0保存的是当前行的内容

img

awk '{print "hello"}' 1.txt  #逐行读取1.txt文件内容,
每行结束后打印一个hello,文件1.txt有多少行就打印多少个hello

img

awk '{print $1}'  1.txt  #打印1.txt的第一列内容,在不指定分割符的情况下,
awk默认使用空白做分割符

img

awk  -F ":" '{print $1}' /etc/passwd   #以":"为分隔符打印/etc/passwd文件的第一例内容

img

实例2:将awk指令写入文件,通过-f选项调用

vim awkscriptBEGIN {FS=":"}{print $1}
awk -f awkscript /etc/passwd #通过调用awk指令文件来执行awk命令

img

实例3:awk的BEGIN块和END块

BEGIN用于初始化FS变量(列分隔符),打印标题,或者初始化后需要在程序中调用的全局变量

END用于执行最后的运算或者打印最终的输出结果

END块和BEGIN不是必须的

实例4:在awk中使用正则匹配,正则表达式必须要放在//中

awk '/123/{print}'  1.txt  #打印1.txt中匹配123的那一行内容

img

awk -F ":"  '/123/{print $2}' 1.txt  
#以":"为分隔符打印1.txt中匹配123的那一行中,第二列的内容

img

awk -F ":" '$1 ~ /root/{print $2}'  /etc/passwd 
#打印/etc/passwd中,第一列匹配root的行其第二列的内容 ~表示匹配

img

实例5:awk的表达式和块

awk提供了多个比较操作符:"==" ">" "<" "<=" ">=" "!="  "~"匹配  "!~"不匹配
awk 'BEGIN{ FS=":"} $1 == "root" {print $3}'  /etc/passwd 
#以":"为分隔符,打印/etc/passwd中第一列是root的行其第3列的内容

img

实例6:awk中的条件语句

awk 'BEGIN {FS=":"} {if ($1 ~ "root") {print $2}}'  /etc/passwd 
# 以":"为分隔符,打印/etc/passwd文件中第一列匹配root的行,其第二列的内容

img

awk 'BEGIN {FS=":"} ($1 ~ "linux" || $2 ~ "Network") {print $3}'  1.txt 
# 以":"为分隔符,打印1.txt文件中,第一列匹配linux或者第二列匹配Network的行,其第三列的内容

img

在awk中NF变量记录的是当前行中有多少列(默认是空格为分割符)

awk '/ock/{print NF}' 1.txt # 统计匹配ock的行有多少列

img

awk 'NF == 3 {print}'  1.txt  
#打印1.txt中有3列的行的内容,示例中,第二行有三列,所以打印的就是第二行的内容

img

$NF记录的是当前行最后一列的内容(如果每一行有多列内容)

awk '{if (NR > 3) {print $NF} }' 1.txt    
# 输出1.txt中行号大于3的行,其最后一列的内容 

img

NR记录的是当前行的行号

awk '{if (NR > 3) {print NR".\t"$0} }' 1.txt  
#格式化输入1.txt中行号大于3的行的行号和内容

img

awk 'BEGIN { x=0 } /^$/{x=x+1} END{print "find" " " x " " "blank lines"}'  1.txt  
#统计1.txt中有多少空行

img

awk 'BEGIN { x=0 } /^$/{x=x+1} END{print "find" " " x " " "blank lines"}'  1.txt  
#统计1.txt中有多少空行

img

awk脚本示例1:

功能:打印1.txt文本中每一列的内容

\#!/bin/bash
num=`wc 1.txt | awk '{print $2}'`   # 统计1.txt文件有多少列
for i in `seq 1 $num`            # 根据文件列数进行循环
doawk -v a=$i  '{print $a}' 1.txt     # 打印每一列的内容,-v 参数可以指定一个变量保存外部变量的值,将外部变量传递给awk
done

img

img

示例2:

使用awk查看当前系统中的TCP连接状态和对应状态的连接数

netstat -n | awk '/^tcp/ {++T[$NF]} END {for(key in T) print key,T[key]}'

#使用netstat -n 查看网络连接,/^tcp/匹配以tcp开头的连接,将其匹配行的最后一列内容(即TCP的连接状态)作为下标生成数组T[],++T[$NF]表示每匹配一次,将该下标的元素值加1,左后在END 中遍历数组,输出对应TCP连接状态的值

img

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

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

相关文章

linux下的shell脚本(基础)

Shell是一种脚本语言&#xff0c;那么&#xff0c;就必须有解释器来执行这些脚本&#xff0c;常见的脚本解释器有&#xff1a; bash&#xff1a;是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成&#xff0c;是BourneAgain Shell的缩写&#xff0c;内部命令一共有…

mysql rsync复制,mysql复制又同步

mysql复制再同步由于一个老旧系统没有使用LVM分区,导致mylvmbackup不能使用。为了重新全量同步数据库&#xff0c;发现rsync可以使用&#xff0c;并且锁住数据库的时间不长。1. 首先刷新数据库到文件flush tables with read lock;unlock tables;2. 执行rsync进行数据库同步/usr…

解决springboot中只支持get请求,无法支持post请求

解决springboot中只支持get请求&#xff0c;无法支持post请求 报错信息如下&#xff1a; 405 相关类如下&#xff1a; RestController RequestMapping public class HttpServiceController {Autowiredprivate HttpSecretReport httpSecretReport;Autowiredprivate HttpSecret…

mysql2005卸载步骤,二次安装mysql步骤

1.先将mysql服务停止&#xff0c;并关闭服务页面(否则后面报错&#xff1a;“指定的服务已经标记为删除”)&#xff1a;打开“任务管理器”可以找到服务页面2.在控制面板对mysql进行删除。找到并将其卸载&#xff0c;如果没有直接跳过3.在注册表中删除相关目录。(使用组合键&qu…

Spring Boot 默认数据源 HikariDataSource_Spring Boot 中使用 Hikari

Spring Boot 默认数据源 HikariDataSource springboot2.x之后&#xff0c;系统的默认数据源由原来的的org.apache.tomcat.jdbc.pool.DataSource更改为com.zaxxer.hikari.HikariDataSource。 HikariDataSource 号称 Java WEB 当前速度最快的数据源&#xff0c;相比于传统的 C3…

matlab取出等高线上的数据,在Python或MATLAB中从等高线图中提取数据

这是一个小型的Matlab脚本&#xff0c;可以完成这项工作(使用一些GUI&#xff0c;在图的斜角处读取guidlines)&#xff1a;%// Import the data:imdata importdata(your_picture_file);Gray rgb2gray(imdata.cdata);colorLim [-1 1]; %// this should be set manually%// Ge…

SpringBoot-默认数据源HikariDataSource对数据库操作及自动装配原理

默认数据源HikariDataSource对数据库操作 在创建项目时选择JDBC以及MySQL驱动&#xff0c;让SpringBoot自动装配所需组件 创建完成后默认的pom.xml文件如下 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…

matlab fgetl用法,Matlab fgetl strsplit 函数

函数功能&#xff1a;从文件中调用一行数据matlab中fgetl函数&#xff0c;并除去行末的换行符。语法格式&#xff1a;tline fgetl(fid)fid是通过fopen函数打开文件后得到的一个整型的文件标志。fgetl从这个文件中调用一行数据并丢弃其中的换行符。如果抓取成功tline容纳了调用…

HikariCP源码简洁剖析——HikariDataSource_HikariCP的使用和源码

文章目录HikariDataSource的作用源码剖析核心变量构造方法获取链接实例HikariCP的使用和源码简介HikariCP是什么&#xff1f;HikariCP 解决了哪些问题&#xff1f;为什么要使用 HikariCP&#xff1f;本文要讲什么&#xff1f;如何使用 HikariCP需求项目环境引入依赖编写 hikari…

MySQL如何创建沙箱,沙箱环境搭建 - osc_y8w65yuq的个人空间 - OSCHINA - 中文开源技术交流社区...

[toc]测试环境搭建沙箱环境&#xff1a;-------测试环境搭建基础配置&#xff1a;# 1、在沙箱环境下实名认证&#xff1a;https://openhome.alipay.com/platform/appDaily.htm?tabinfo# 2、电脑网站支付API&#xff1a;https://docs.open.alipay.com/270/105898/# 3、完成RSA密…

PHP单选框实现的方法,jQuery简单实现遍历单选框的方法

本文实例讲述了jQuery简单实现遍历单选框的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;1、问题背景&#xff1a;有四个单选框&#xff0c;分别为一年四季&#xff0c;现在需要判断是否选中&#xff0c;如果选中这个单选框&#xff0c;就将其值赋值给输入框2、…

String怎么转成BigDecimal_Java.math.BigDecimal类的使用

1.引言 浮点数值不适用于无法接受舍入误差的金融计算中。 例如&#xff0c;命令System.out.prmtln (2.0-1.1)将打印出0.8999999999999999&#xff0c;而不是人们想象的0.9 。 2.0-1.1的运算结果 这种舍入误差的主要原因是浮点数值采用二进制系统表示&#xff0c;而在二进制系统…

JTS Java空间几何计算、距离、最近点、subLine等计算

文章目录前言地理坐标系和投影坐标系地理坐标系投影坐标系地图投影墨卡托/Web墨卡托常见坐标系地理坐标系和投影坐标系互转EPSG:3857和EPSG:4326Java各坐标系之间的转换&#xff08;高斯、WGS84经纬度、Web墨卡托、瓦片坐标&#xff09;GeotoolsJTSvividsolutions和locationtec…

JTS学习笔记

简介 JTS由加拿大的VividSolutions公司开发&#xff0c;是一个用Java语言描述的几何拓扑套件&#xff0c;遵循OpenGIS的Simple Feature Specification&#xff0c;封装了2D几何类型和非常多的空间分析操作&#xff0c;而且包含了不少常见的计算几何算法实现。 JTS被广泛地应用…

填坑:Maven工程引用GeoTools依赖

这两天在做一个系统的后台&#xff0c;需要用到GeoTools做后端空间分析&#xff0c;记录一下自己遇到的问题。 项目通过Maven进行构建&#xff0c;参照文档Maven Quickstart添加GeoTools依赖和远程仓库地址。 <dependencies><dependency><groupId>org.geotoo…

墨卡托投影介绍

一、墨卡托投影 墨卡托投影&#xff0c;又称正轴等角圆柱投影&#xff0c;由荷兰地图学家墨卡托(G.Mercator)于1569年创拟。假设地球被套在一个圆柱中&#xff0c;赤道与圆柱相切&#xff0c;然后在地球中心放一盏灯&#xff0c;把球面上的图形投影到圆柱体上&#xff0c;再把…

GIS算法:可视化工具JTS TestBuilder

java、python、js都有可以引用的第三方包&#xff0c;实现GIS的空间算法。 java是jts&#xff0c;python是shapely&#xff0c;js是turf。 其中jts值得首先拥有&#xff0c;因为jts提供了一个界面工具JTS TestBuilder&#xff0c;可以在上面绘制图形&#xff0c;验证各种算法…

wkt区域围栏

API文档 http://shengshifeiyang.gitee.io/geotools-learning/ /** * 判断以x,y为坐标的点point(x,y)是否在geometry表示的Polygon中 * param x * param y * param geometry wkt格式 POLYGON((0 0, 10 0, 10 10, 0 10,0 0)) * return */ public static boolean withinGeo(doub…

oracle关联字段和序列,oracle(9) 序列和约束

序列 SEQUENCE也是数据库对象之一&#xff0c;作用&#xff1a;根据指定的规则生成一些列数字。序列通常是为某张表的主键提供值使用。主键&#xff1a;通常每张表都会有主键字段&#xff0c;该字段的值要求非空且唯一&#xff0c;使用该字段来确定表中的每一条记录。CREATE SE…

lambda表达式处理异常_lambda表达式内出现异常无法throw抛出

lambda体中有受检异常,为什么不能在lambda表达式外层try catch,只能在lambda里面try catch xxx.getUpdateList().forEach((map) ->{xxxVO vo new xxxVO();BeanUtils.populate(vo,map); // populate方法往外抛了异常list.add(vo);});因为lambda表达式本身没有处理异常的机制…