linux $0命令,Linux:awk命令详解

2023-11-10

dd0db89a4f4be70dc2e62a61e7170c89.png

简单使用:

awk :对于文件中一行行的独处来执行操作 。

awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 。

AWK命令介绍

awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本文件中的信息

1. 调用awk:

第一种命令行方式,如:

awk [-Field-separator] 'commands' input-file(s)

这里commands是真正的awk命令,[-F域分隔符]是可选的,awk默认使用空格分隔,因此如果要浏览域间有空格的文本,不必指定这个选项,但如果浏览如passwd文件,此文件各域使用冒号作为分隔符,则必须使用-F选项:   awk -F : 'commands' input-file

第二种,将所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它

第三种,将所有awk命令插入一个单独文件,然后调用,如:

awk -f awk-script-file input-file

-f选项指明在文件awk-script-file的awk脚本,input-file是使用awk进行浏览的文件名

2. awk脚本:

awk脚本由各种操作和模式组成,根据分隔符(-F选项),默认为空格,读取的内容依次放置到对应的域中,一行一行记录读取,直到文件尾

2.1.  模式和动作

任何awk语句都是由模式和动作组成,在一个awk脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事件。动作即对数据进行的操作,如果省去模式部分,动作将时刻保持执行状态

模式可以是任何条件语句或复合语句或正则表达式,模式包含两个特殊字段BEGIN和END,使用BEGIN语句设置计数和打印头,BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行;END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志,有动作必须使用{}括起来

实际动作在大括号{}内指明,常用来做打印动作,但是还有更长的代码如if和循环looping语句及循环退出等,如果不指明采取什么动作,awk默认打印出所有浏览出的记录

2.2. 域和记录:

awk执行时,其浏览标记为$1,$2...$n,这种方法称为域标记。使用$1,$3表示参照第1和第3域,注意这里使用逗号分隔域,使用$0表示使用所有域。例如:

awk '{print $0}' temp.txt > sav.txt

表示打印所有域并把结果重定向到sav.txt中

awk '{print $0}' temp.txt|tee sav.txt

和上例相似,不同的是将在屏幕上显示出来

awk '{print $1,$4}' temp.txt

只打印出第1和第4域

awk 'BEGIN {print "NAME GRADE\n----"} {print $1"\t"$4}' temp.txt

表示打信息头,即输入的内容的第一行前加上"NAME  GRADE\n-------------",同时内容以tab分开

awk 'BEGIN {print "being"} {print $1} END {print "end"}' temp

同时打印信息头和信息尾

2.3. 条件操作符:

=、~匹配正则表达式、!~不匹配正则表达式

匹配:awk '{if ($4~/ASIMA/) print $0}' temp 表示如果第四个域包含ASIMA,就打印整条

精确匹配:awk '$3=="48" {print $0}' temp    只打印第3域等于"48"的记录

不匹配:  awk '$0 !~ /ASIMA/' temp      打印整条不包含ASIMA的记录

不等于:  awk '$1 != "asima"' temp

小于:    awk '{if ($1

设置大小写: awk '/[Gg]reen/' temp      打印整条包含Green,或者green的记录

任意字符: awk '$1 ~/^...a/' temp    打印第1域中第四个字符是a的记录,符号’^’代表行首,符合’.’代表任意字符

或关系匹配: awk '$0~/(abc)|(efg)/' temp   使用|时,语句需要括起来

AND与关系:  awk '{if ( $1=="a" && $2=="b" ) print $0}' temp

OR或关系:   awk '{if ($1=="a" || $1=="b") print $0}' temp

2.4. awk内置变量:

ARGC

命令行参数个数

NF

浏览记录的域个数

AGRV

命令行参数排列

NR

已读的记录数

ENVIRON

支持队列中系统环境变量的使用

OFS

输出域分隔符

FILENAME

awk浏览的文件名

ORS

输出记录分隔符

FNR

浏览文件的记录数

RS

控制记录分隔符

FS

设置输入域分隔符,同- F选项

NF

浏览记录的域个数

例:

awk 'END {print NR}' temp 在最后打印已读记录条数

awk '{print NF,NR,$0} END {print FILENAME}' temp

awk '{if (NR>0 && $4~/Brown/) print $0}' temp 至少存在一条记录且包含Brown

NF的另一用法: echo $PWD | awk -F/ '{print $NF}' 显示当前目录名

2.5. awk操作符:

在awk中使用操作符,基本表达式可以划分成数字型、字符串型、变量型、域及数组元素

设置输入域到变量名:

awk '{name=$1;six=$3; if (six=="man") print name " is " six}' temp

域值比较操作:

awk 'BEGIN {BASE="27"} {if ($4

修改数值域取值:(原输入文件不会被改变)

awk '{if ($1=="asima") $6=$6-1;print $1,$6,$7}' temp

修改文本域:

awk '{if ($1=="asima) ($1=="desc");print $1}' temp

只显示修改记录:(只显示所需要的,区别上一条命令,注意{})

awk '{if ($1=="asima) {$1=="desc";print$1}}' temp

创建新的输出域:

awk '{$4=$3-$2; print $4}' temp

统计列值:

awk '(tot+=$3);END {print tot}' temp 会显示每列的内容

awk '{(tot+=$3)};END {print tot}' temp 只显示最后的结果

文件长度相加:

ls -l|awk '/^[^d]/ {print $9"\t"$5} {tot+=$5} END{print "totKB:" tot}'

只列出文件名:

ls -l|awk '{print $9}' 常规情况文件名是第9域

2.6. awk内置字符串函数:

gsub(r,s) 在整个$0中用s替代r

awk 'gsub(/name/,"xingming") {print $0}' temp

gsub(r,s,t) 在整个t中用s替代r

index(s,t) 返回s中字符串t的第一位置

awk 'BEGIN {print index("Sunny","ny")}' temp 返回4

length(s) 返回s的长度

match(s,r) 测试s是否包含匹配r的字符串

awk '$1=="J.Lulu" {print match($1,"u")}' temp 返回4

split(s,a,fs) 在fs上将s分成序列a

awk 'BEGIN {print split("12#345#6789",myarray,"#")"'

返回3,同时myarray[1]="12", myarray[2]="345", myarray[3]="6789"

sprint(fmt,exp) 返回经fmt格式化后的exp

sub(r,s) 从$0中最左边最长的子串中用s代替r(只更换第一遇到的匹配字符串)

substr(s,p) 返回字符串s中从p开始的后缀部分

substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分

2.7.  printf函数的使用:

字符转换: echo "65" |awk '{printf "%c\n",$0}' 输出A

awk 'BEGIN {printf "%f\n",999}' 输出999.000000

格式化输出:awk '{printf "%-15s %s\n",$1,$3}' temp 将第一个域全部左对齐显示

2.8. 其他awk用法:

向一行awk命令传值:

awk '{if ($5

who | awk '{if ($1==user) print $1 " are in " $2 ' user=$LOGNAME 使用环境变量

awk脚本命令:

!/bin/awk -f

# all comment lines must start with a hash '#'

# name: student_tot.awk

# to call: student_tot.awk grade.txt

# prints total and average of club student points

# print a header first

BEGIN

{

print "Student Date Member No. Grade Age Points Max"

print "Name Joined Gained Point Available"

print"========================================================="

}

# let's add the scores of points gained

(tot+=$6);

# finished processing now let's print the total and average point

END

{

print "Club student total points :" tot

print "Average Club Student points :" tot/N

}

2.9. awk数组:

awk的循环基本结构

For (element in array) print array[element]

awk 'BEGIN {

record="123#456#789";split(record,myarray,"#")

}

END {

for (i in myarray) {print myarray[i]}

}

3.0  awk中自定义语句

3.1. 条件判断语句(if)

if(表达式) #

if ( Variable in Array )

语句1

else

语句2

格式中"语句1"可以是多个语句,如果你为了方便Unix awk判断也方便你自已阅读,你最好将多个语句用{}括起来。Unix awk分枝结构允许嵌套,其格式为:

if(表达式)

{语句1}

else if(表达式)

{语句2}

else

{语句3}

awk 'BEGIN{

test=100;

if(test>90)

{

print "very good";

}

else if(test>60)

{

print "good";

}

else

{

print "no pass";

}

}'

very good

每条命令语句后面可以用“;”号结尾。

3.2. 循环语句(while,for,do)

1.while语句

格式:

while(表达式)

{语句}

例子:

[chengmo@localhost nginx]# awk 'BEGIN{

test=100;

total=0;

while(i<=test)

{

total+=i;

i++;

}

print total;

}'

5050

2.for 循环

for循环有两种格式:

格式1:

for(变量 in 数组)

{语句}

例子:

[chengmo@localhost nginx]# awk 'BEGIN{

for(k in ENVIRON)

{

print k"="ENVIRON[k];

}

}'

AWKPATH=.:/usr/share/awk

OLDPWD=/home/web97

SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass

SELINUX_LEVEL_REQUESTED=

SELINUX_ROLE_REQUESTED=

LANG=zh_CN.GB2312

。。。。。。

说明:ENVIRON 是awk常量,是子典型数组。

格式2:

for(变量;条件;表达式)

{语句}

例子:

[chengmo@localhost nginx]# awk 'BEGIN{

total=0;

for(i=0;i<=100;i++)

{

total+=i;

}

print total;

}'

5050

3.do循环

格式:

do

{语句}while(条件)

例子:

[chengmo@localhost nginx]# awk 'BEGIN{

total=0;

i=0;

do

{

total+=i;

i++;

}while(i<=100)

print total;

}'

5050

以上为awk流程控制语句,从语法上面大家可以看到,与c语言是一样的。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。

break

当 break 语句用于 while 或 for 语句时,导致退出程序循环。

continue

当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。

next

能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。

exit

语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux $0命令,Linux:awk命令详解 的相关文章

  • 【校招VIP】java开源框架之Zookeeper

    考点介绍 ZooKeeper是一个分布式的 开放源码的分布式应用程序协调服务 主要为了解决分布式架构下数据一致性问题 典型的应用场景有分布式配置中心 分布式注册中心 分布式锁 分布式队列 集群选举 分布式屏障 发布 订阅等场景 本期分享的j
  • python自动化访问百度地图

    要在 Python 中自动化访问百度地图 你可以使用第三方库 selenium 来实现 Selenium 是一种自动化测试工具 可以模拟用户在浏览器上执行操作 首先 你需要安装 Selenium 可以通过运行以下命令来安装它 pip ins
  • Go语言面试题--基础语法(16)

    文章目录 1 f1 f2 f3 函数分别返回什么 2 下面代码段输出什么 3 关于channel的特性 下面说法正确的是 1 f1 f2 f3 函数分别返回什么 func main fmt Println f1 fmt Println f2
  • 【HDLBits 刷题 13】Buliding Larger Circuits

    目录 写在前面 Buliding Larger Circuits count1k shiftcount fsm seq fsmshift fsm fancytimer fsm onehot 写在前面 以下的解题方法不一定为最佳解决方案 有更
  • 构造树型结构数据

    构造树型结构数据 param data 数据源 param id id字段 默认 id param parentId 父节点字段 默认 parentId param children 孩子节点字段 默认 children export fu
  • AUC的计算、物理意义,

    文章目录 一 定义 二 性质 三 计算 3 1 方法一 根据定义 3 2 方法二 根据意义 3 3 方法三 方法二优化 3 4 方法四 工业场景 四 物理意义推导 一 定义 ROC曲线与坐标轴围成的面积 ROC曲线由不同阈值下 TPR Y轴
  • Linux内核在I386架构下的内存管理

    转载自 http blog csdn net li shyng article details 5545973 同类型的 http www kerneltravel net journal ii I386是Intel的x86系列CUP中一个
  • 前端页面有那三层构成,分别是什么?作用是什么?

    结构 表现和行为 其中结构主要是有HTML标签组成 结构即在页面body里面我们写入的标签都是为了页面的结构 表现即指css样式表 通过css可以是页面的结构标签更具美感 行为是指页面和用户具有一定的交互 同时页面结构或者表现发生变化 主要
  • 接口测试工具-apifox

    Apifox 是 API 文档 API 调试 API Mock API 自动化测试一体化协作平台 定位 Postman Swagger Mock JMeter 通过一套系统 一份数据 解决多个系统之间的数据同步问题 只要定义好 API 文档
  • 将一个网页设置为屏保

    有没有试过将一个网页作为屏保 最近我正好有这个需求 一些需要给家里人经常看到的提示信息 如果定闹钟多了大家嫌烦 我口头提示多了比闹钟还烦 印在A4纸上贴墙上既影响美观又不容易修改内容 打印还要花银子 自己写字又不好看 突然想到我几乎每天早上
  • Unity播放音频

    在Unity中 可以在物体上添加AudioSource组件来播放音频 AudioSource组件可以控制音频文件的播放 音量 音调 空间效果等属性 以下是在物体上添加AudioSource组件的步骤 1 在Unity中打开场景 选择您想要添
  • tensorflow-gpu 2.3.0安装 及 相关对应版本库安装(Anaconda安装)

    目录 如需转载 请标明出处 谢谢 一 安装tensorflow gpu2 3 0 二 配置其他相关的库 很多人以为安装完tensorflow gpu就是一切都结束了 但是殊不知 python中的很多库 比如numpy matplotlib等
  • 【JavaScript数据结构与算法】一、栈及leetcode实战

    栈 栈是一种遵从后进先出 LIFO 原则的有序集合 新添加或待删除的元素都保存在栈的同一端 称作栈顶 另一端就叫栈底 在栈里 新元素都靠近栈顶 旧元素都接近栈底 栈数据结构 我们需要一种数据结构来保存栈里的元素 可以选择数组 数组允许我们在
  • 数据库查询优化 --- 索引 Index

    数据库查询优化 索引 Index 什么是索引 索引的实现方法 聚集索引 和 非聚簇索引 聚集索引 非聚集索引 组合索引 索引的使用 适合使用索引的场景 不适合使用索引的场景 SQL创建索引 什么是索引 没有加索引的数据 它的数据无序的放置在
  • 串级PID与单极PID的区别

    目录 前言 一 什么是串级PID 二 串级PID与单极PID比较 1 控制小车开到某一位置 2 平衡小车速度控制 三 什么时候用串级PID 结语 前言 本文将讲述串级PID与单极PID的区别 并由此引出什么时候用串级PID 对于想深入学习P
  • electron vue3 + ts 初始化项目

    新建 vue3 ts 项目 npm init vitejs app electron demo 选择 vue ts 等待项目创建完成 安装 electron npm i electron D 确认 node modules electron
  • 【C++入门】运算符重载详解

    1 什么是运算符重载 不可重载运算符 运算符含义 成员访问运算符 gt 和 成员指针访问运算符 域运算符 sizeof 长度运算符 条件运算符 预处理符号 1 运算符 运算符分为算术运算符 关系运算符 逻辑运算符 等 2 运算符重载 给运算
  • idea授权服务器

    这里提供一个我已经搭建好的idea授权服务器 http ysk521 cn 1017
  • ctfshow萌新红包题writeup

    ctfshow萌新专属红包题writeup 题目来源 https ctf show 这一题是ctfshow平台上面2月17日更新的一个萌新红包题 当天在官方交流群内知道晚上会有一个萌新红包题之后 就有点期待了 小萌新也想拿一次红包 嘿嘿 下

随机推荐

  • 推挽输出和开漏输出区别

    推挽输出 可以输出高 低电平 连接数字器件 输出 0 时 N MOS 导通 P MOS 高阻 输出0 输出 1 时 N MOS 高阻 P MOS 导通 输出1 不需要外部上拉电路 开漏输出 输出端相当于三极管的集电极 要得到高电平状态需要上
  • 同步代码块、io、file常用的方法、流

    一 同步 1 同步代码块 把要实现线程安全的代码放在同步代码块中 java中任何对象内部都有一个开关 你可以理解为标志位 1就是表示关 0就表示开 2 同步方法 二 io input输入 output输出 计算机中的文件以及文件中的内容 F
  • maven的下载安装配置教程(详细图文)

    maven的下载安装配置教程 详细图文 一 maven的下载 https maven apache org download cgi 下载zip文件 二 maven的安装 注意 maven的安装需要依赖jdk的安装 所以必须先安装完成jdk
  • STM32的PWM相关函数TIM_SetCompare1的一定理解

    void TIM SetCompare1 TIM TypeDef TIMx uint16 t Compare1 Check the parameters assert param IS TIM LIST8 PERIPH TIMx Set t
  • mysql-mmm集群

    一 Mysql mmm集群技术概述 概述 MMM Master Master replication manager for MySQL 是一套支持双主故障切换和双主日常管理的脚本程序 MMM使用Perl语言开发 主要用来监控和管理MySQ
  • RecyclerView(一)—— ListView的使用

    ListView ListView在过去绝对可以称得上是Android中最常用的控件之一 几乎所有的应用程序都会用到它 由于手机屏幕空间比较有限 能够一次性在屏幕上显示的内容并不多 当我们的程序中有大量的数据需要展示的时候 就可以借助Lis
  • vscode给某行代码添加标签

    只有你习惯于一种编程工具风格 vscode几乎都能给你做的 Numbered Bookmarks 数字标签跳转类似与webstrom 定义 Ctrl SHIFT 数字 跳转 Ctrl 数字 vscode给某行代码添加标签 标注 用于代码间快
  • Qt使用QJSEngine执行脚本

    有时候需要进行一些计算 程序是使用c 来实现的 使用c 来进行计算不是很灵活 这时候可以使用脚本来进行计算 这样灵活 且易于扩展 写了一个简单的Demo进行验证 具体例子如下 include
  • Java - 带参的异常处理模块try(xxx){...}

    带资源的try语句 try with resource 的最简形式为 try Resource res xxx 可指定多个资源 do something try块退出时 会自动调用res close 方法 关闭资源 其实这样做的原因 主要是
  • mysql24,Mysql24之事务隔离级别和MVCC

    TOC 事前准备 为了故事的顺利发展 我们需要创建一个表 CREATE TABLE hero number INT name VARCHAR 100 country varchar 100 PRIMARY KEY number Engine
  • mmdetection 中 Mask Rcnn检测结果可视化(DICE计算、PR曲线绘制等)

    mmdetection中的Mask Rcnn是一个很不错的检测网络 既可以实现目标检测 也可以实现语义分割 官方也有很详细的doc指导 但是对新手来说并不友好 刚好之前笔者写的mmlab系列里面关于可视化都还没有一个详细的文档 也在此一并介
  • 逆向破解之破解补丁与劫持Dll

    破解补丁 前言 破解补丁的作用是修改程序内存地址的硬编码 以此来实现破解软件 这是常见的JE跳转用来判断注册码是否正确 若401108位置的汇编指令给Nop掉就能实现破解 编写代码 1 C语言 运行程序后输入要破解的程序进程ID inclu
  • yolov5源码解读--训练策略

    yolov5源码解读 训练策略 超参数解读 命令行参数 train 模型迭代 测试 超参数解读 hyp scratch yaml lr0 0 0032 初始学习率 lrf 0 12 使用余弦函数动态降低学习率 lr0 lrf momentu
  • spark入门小例子

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1221 1 pyspark 2 spark shell spark网页管理页面 http 127 0 0 1 4040 jobs 3 设置日
  • Redis常见数据结构的常用命令及引用

    String 1 常用命令 字符串常用操作 SET key value 存入字符串键值对 MSET key value key value 批量存储字符串键值对 SETNX key value 存入一个不存在的字符串键值对 GET key
  • AVLTree-平衡二叉树-coming soon

  • php验证用户账号密码正确,php-检查用户名和密码是否正确

    因为我的代码是正确的 所以我总是得到回显 Username Passwordcorrect 用户名 密码是否匹配 我的问题是 我在下面的代码中为PHP总是回显 用户名 密码错误 而做错了什么 require privstuff dbinfo
  • jupyter notebook使用基础及其快捷键,包括对文档操作、cell操作、快捷键、markdown

    目录 Jupyter Notebook介绍 使用原因 基本操作 新建notebook文档 对文档的操作 cell操作 什么是cell Jupyter支持两种模式 鼠标操作 Jupyter快捷键操作 markdown演示 手动建导航 Jupy
  • 网络编程 - Java SSLSocketFactory 创建方式

    SSL TLS 认证需要服务端提供 KeyStore jks TrustStore jks 实现方式 优缺点 服务端提供 CA Client CRT Client Key 文件 缺点 服务端提供原始签名 不安全不建议采用 服务端提供 Key
  • linux $0命令,Linux:awk命令详解

    简单使用 awk 对于文件中一行行的独处来执行操作 awk F print 1 4 使用 来分割这一行 把这一行的第一第四个域打印出来 AWK命令介绍 awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息 awk抽取信息后 才