Ⅰ shell中,awk命令的$0是什么意思
awk默认是以行为单位处理文本的,对1.txt中的每一行都执行后面
"{
}"
中的语句。
awk中的两个术语:
记录(默认就是文本的每一行)
字段
(默认就是每个记录中由空格或TAB分隔的字符串)
$0就表示一个记录,$1表示记录中的第一个字段。
一般
print
$0
就是打印整行内容($0前面不需要
反斜杠
),print
$1表示只打印每行第一个字段。
Ⅱ shell基础应用(五)
一,正则表达式
w匹配数字、字母、下划线
egrep "roow" user //找roo后面是数字、字母、下划线的字符串
s 匹配空格、tab键
egrep "roos" user //找roo后面是1个空格或者tab键打出来的空格的字符串,如果没有
就不输出
二,sed其他指令
a行下追加 i行上添加 c替换整行
sed 'a 666' user //所有行的下面追加666
sed Ƈa 666' user //第1行的下面追加666
sed '/^bin/a 666' user //在以bin开头的行的下面追加666
sed 'i 666' user //所有行的上面添加666
sed Ƌi 666' user //第5行的上面添加666
sed '$i 666' user //最后1行的上面添加666
sed 'c 666' user //所有行都替换成666
sed Ƈc 666' user //替换第1行为666
---------------------------------------------------------
三,awk
可以实现精确搜索并输出 ,逐行处理
1,前置指令 | awk 选项 条件 指令
2,awk 选项 条件 指令 被处理文档
选项 -F 定义分隔符
指令 print
条件 /字符串/
内置变量 $1第一列 $2第二列 $3第三列 ...
$0 所有列 NR行号 NF 列号
[root@proxy opt]# cat abc.txt //准备素材
hello the world
welcome to beijing
awk '{print}' abc.txt //输出所有
awk '/to/{print}' abc.txt //输出有to的那行
awk '{print $2}' abc.txt //输出所有行的第2列
awk '/to/{print $1}' abc.txt //输出有to的那行的第1列
awk '{print $0}' abc.txt //输出所有行所有列
awk '{print $0,$1}' abc.txt //输出所有行所有列和第1列
awk '{print NR}' abc.txt //输出所有行的行号
awk '{print NR,$0}' abc.txt //输出所有行的行号,所有列
awk '{print NR,NF}' abc.txt //输出所有行的行号,列号(有几列)
awk '/^bin/{print NR}' user //找以bin开头的行,显示该行的行号
awk '/^bin/{print NR,$0}' user //找以bin开头的行,显示该行的
行号,所有列
awk '{print NF}' user //输出所有行的列号(每行有几列)
awk -F: '{print $1}' user //文档中如果没有空格,可以用F修改分
隔符
awk -F: '{print $1,$6}' user //使用冒号作为列的分隔符,显示
第1、6列
awk -F: '{print $1" 的家目录是 "$6}' user //还可以输出常量,加
双引号即可
awk -F: '{print $1" 的解释器是 "$7}' user
收集根分区剩余容量
df -h | awk '//$/{print $4}' //使用df -h 作为前置指令交给awk处理
找到以/结尾的行,并输出第4列
df -h | awk '//$/{print "根分区剩余容量是"$4}' //然后加常量输出
收集网卡流量信息
ifconfig eth0 | awk '/RX p/{print "eth0网卡接收的数量量是"$5}'
ifconfig eth0 | awk '/TX p/{print "eth0网卡发送的数量量是"$5}'
------------------------------------------------------------
四,awk的条件
1,/字符串/ 还可以使用正则 ~ 包含 !~不包含
awk -F: '$6~/root/{print}' user //输出第6列包含root的行
awk -F: '$6~/bin/{print}' user //输出第6列包含bin的行
awk -F: '$6!~/bin/{print}' user //输出第6列不包含bin的行
2,使用数字或者字符串
== != > >= < <=
awk -F: '$3<3{print}' user //输出第3列小于3的行
awk -F: '$3<=3{print}' user //输出第3列小于等于3的行
awk -F: 'NR==2{print}' user //输出第2行
awk -F: 'NR>2{print}' user //输出行号大于2的行
3,逻辑组合 &&并且 ||或者
awk -F: 'NR==2||NR==4{print}' user //找行号是2或者4的行
awk -F: 'NR==2||NR==40{print}' user //如果只有一个条件满足就显示一个
awk -F: '$7~/bash/&&$3<=500{print}' user //找第7列包含bash并且第3列
小于等于500的行
awk 'NR==2&&NR==4{print}' user //找行号既是2又是4的行,不存在,无输出
awk -F: '$7~/bash/&&NR<=3{print}' user //找第7列包含bash并且行号是1~3的
awk -F: '$7~/bash/||NR<=3{print}' user //找第7列包含bash或者行号是1~3的
awk -F: '$1~/root/' user //找第1列包含root的行
如果有用户叫root6,也会搜到,比较宽松的搜索方式,如果
任务就是{print}的话可以省略不写
awk -F: '$1=="root"' user //找第1列完全等于root的行
多一个字符少一个字符都不行,比较严格的搜索方式
4,运算
awk 'NR%2==0{print NR,$0}' user //在条件中使用运算
,找到将行号除以2余数等于0的行,然后输出该行的
行号和所有列,相当于输出偶数行
-----------------------------------------------------
五,awk处理时机,可以执行额外任务
BEGIN任务 执行1次,读取文档之前执行
逐行任务 执行n次,读取文档时执行
END任务 执行1次,读取文档之后执行
BEGIN{ 任务1 }{ 任务2 }END{ 任务3 }
awk -F: 'BEGIN{print "ok"}{print $1}END{print "ok"}' user
awk 'BEGIN{print NR}{print NR}END{print NR}' user
利用awk处理时机,输出下列内容
awk 'BEGIN{print "User UID Home"}' //第1步输出表头信息
awk -F: '{print $1" "$3" "$6}' user //第2步输出内容
awk 'END{print "总计"NR"行" }' user //第3步输出结尾
awk -F: 'BEGIN{print "User UID Home"}{print $1" "$3" "$6}END{print "总计"NR"行"}' user //合在一起写
---------------------------------------------------------------------------
使用awk统计网站访问量
setenforce 0 //关闭selinux
systemctl stop firewalld //关闭防火墙
systemctl restart httpd //开启网站服务
使用浏览器多访问几次网站,包括本机用curl
curl 192.168.4.7:82 //如果端口没改过就不用敲
awk '{print $1}' /var/log/httpd/access_log //初步统计,不完美
六,使用awk数组+for循环实现高级搜索
数组 相当于可以存储多个值的特殊变量
数组名[下标]=下标对应的值
awk 'BEGIN{a[1]=10;a[2]=20;print a[2],a[1]}' //使用awk测试数组,首先
创建数组a,下标1对应值是10,下标2对应值是20,然后输出下标是2与
下标是1的值
awk 'BEGIN{a["abc"]="abcabc";a["xyz"]="xyzxyz";print a["xyz"]}' //数组的下标
和值都可以不是数字,测试时加双引号即可
以上信息是手工输入,实际情况中通常是从文档收集
准备一个文档,里面有6行,每行分别是abc、xyz、abc、opq、xyz、abc 然后
按照awk逐行处理的工作特点使用awk '{a[$1]++}' shu.txt 走完每一行得到下列结果
但不会输出到屏幕
a[$1]++ a[abc]++ a[abc]=1
a[$1]++ a[xyz]++ a[xyz]=1
a[$1]++ a[abc]++ a[abc]=2
a[$1]++ a[opq]++ a[opq]=1
a[$1]++ a[xyz]++ a[xyz]=2
a[$1]++ a[abc]++ a[abc]=3
如果要输出到屏幕可以使用命令awk '{a[$1]++}END{print a[abc]}' shu.txt
----------------------
根据上述操作得知使用数组可以收集信息,但收集完了之后查看确不方便,可以用for循环实现。方法如下:
for(变量名 in 数组名){print 变量名} //这个格式可以查看数组的所有下标
awk '{a[$1]++}END{for(i in a){print i,a[i]}}' shu.txt //使用逐行任务与数组
收集文档shu.txt中的信息,然后在END任务中使用for循环显示所有
数组a的下标与值
awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/ac
cess_log //将上述的文件替换成网站的日志,就可以
最终用来查看日志得到可以得到哪个ip来访以及来访的次数
awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/ac
cess_log | sort -nr -k 2 //使用sort命令增加排序
功能,-n是以数字形式排序,-r是降序, -k是指定为
第几列排序
----------------------------------------------------------------------------
/var/log/secure是安全日志,如果有人登陆时输入错误密码的话
信息会记录下来,这种信息可以用awk抓取出来,方法如下:
awk '/Failed password for root/{ip[$11]++}END{for(i in ip){print i,ip[i]}}'
/var/log/secure //统计安全日志中访问root账户密码输入错误
的ip地址与次数
-----------------------------------------------------------------------------
编写脚本,可以查看系统的各种参数信息
#!/bin/bash
while :
do
clear
free -h | awk '/^Mem:/{print "剩余内存容量是"$4}'
df -h | awk '//$/{print "根分区剩余容量是"$4}'
awk 'END{print "用户总数是"NR"个"}' /etc/passwd
who | awk 'END{print "登录用户数量是"NR"个"}'
uptime | awk '{print "cpu的15分钟平均负载是"$NF}'
rpm -qa | awk 'END{print "安装的软件包数量是"NR"个"}'
sleep 3
done
Ⅲ shell中,awk命令的$0是什么意思
shell命令awk '{print $0}' 1.txt 的意思是输出1.txt文件的所有内容。
shell命令awk '{print $1}' 1.txt的意思是输出1.txt文件的第一列内容。
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
(3)shellawk命令扩展阅读:
shell的种类:
Linux中的shell有多种类型,其中最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。
1、Bourne shell是UNⅨ最初使用的shell,并且在每种UNⅨ上都可以使用。Bourne shell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。
Linux操作系统缺省的shell是Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。
Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。
2、C shell是一种比Bourne shell更适于编程的shell,它的语法与C语言很相似。Linux为喜欢使用C shell的人提供了Tcsh。Tcsh是C shell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法,它不仅和Bash shell是提示符兼容,而且还提供比Bash shell更多的提示符参数。
3、Korn shell集合了C shell和Bourne shell的优点并且和Bourne shell完全兼容。Linux系统提供了pdksh(ksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。
参考资料来源:网络-Linux Shell
Ⅳ awk命令详解是什么
awk命令是linux下的一个文件管理命令,具体语法格式为awk [参数] [文件],通常是用于文本和数据进行处理的编程语言,awk命令主要有两个功能;awk命令可以在linux/unix下对文本和数据进行处理;awk命令支持用户自定义函数和动态正则表达式。
相关介绍:
AWK是一种优良的文本处理工具。它不仅是Linux中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人AlfredAho、PeterWeinberger和BrianKernighan姓氏的首个字母)的最大功能取决于一个人所拥有的知识。
AWK提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。
实际上AWK的确拥有自己的语言:AWK程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
最简单地说,AWK是一种用于处理文本的编程语言工具。AWK在很多方面类似于shell编程语言,尽管AWK具有完全属于其本身的语法。它的设计思想来源于SNOBOL4、sed、MarcRochkind设计的有效性语言、语言工具yacc和lex,当然还从C语言中获取了一些优秀的思想。
在最初创造AWK时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。
Ⅳ shell脚本中awk命令内置参数与脚本参数冲突,如何使用内置参数
题主你好,
先声明一下,我的脚本不是太好,供参考.
首先IFS不是awk的内置变量, 而是shell内置变量.
另外awk内部的变量和awk外部语句的变量是两套机制,也就是说假设有个变量a=1,你使用awk '{print a}' 并不会输出1 //当然我的awk语句写的不完整,只是为了表达意思.
你想要在awk中使用外部变量,要使用-v参数或是在最后追加参数的方式将想要使用的变量导到awk空间中, 才能使用,也就是说:
awk -v var="$a" '{print var}' 文件名 //此时你可以使用变量var间接输出变量a的值.
或者写为:
awk '{print var}' var="$a"文件名
====
写在最后: 因为我的脚本不太好,所以调试信息也看不大明白,不过感觉应该不难,题主可以举一个简单具体一点的例子说明一下你想执行哪条语句,输出什么结果,我帮你看一下.
Ⅵ shell中最强大,实用的命令awk
awk是一个文本处理工具,通常用于处理数据并生成结果报告
语法格式
第一种形式
语法格式解释
BEGIN正式处理数据之前
pattern匹配模式
{commands}匹配命令,可能多行
END处理完所有匹配数据后执行
第二种形式
内置变量含义
$0整行内容
n当前行的第1-n个字段(按照指定分隔符分割后)
NF(Number Field)当前行的字段个数,也就是多少列
NR(Number Row)当前行的行号,从1开始计数
FNR(File Number Row)多文件处理时,每个文件行号单独计数,都是从0开始
FS(Field Separator)输入字段分割符。不指定默认以空格或者Tab键分割
RS(Row Separator)输入行分割符。默认回车\n
OFS(Output Field Sepatator)输出字段分割符。默认为空格
ORS(Output Row)输出行分隔符。默认为回车
FILENAME当前输入的文件名字
ARGC命令行参数个数
ARGV命令行参数数组
需要指定分隔符:
不需要指定分割符,默认空格,tab键,多个也可以分隔(如一个空格+一个tab键)
show.txt文件内容如下
输出如下:
输出如下
可以用这个输出每一行的最后一列的值
输出如下(没有混合使用,例子比较简单)
show.txt的文件内容如下
先输出每一行数据
输入如下
输出每一行的第二列
输出如下
在上面基础上指定行分隔符
输出如下
再次指定列分隔符
输出如下
show.txt的文件内容如下
输入如下,因为是对行进行处理,所以有几行,输出几次文件名
jps -l输入如下,运行的服务如下
想关闭mbase-spider-1.0.jar这个jar包的服务,可以写一个如下脚本,非常方便,更高阶用法另开一篇文章好好写写
Ⅶ awk 命令
AWK
command 读前处理 行处理 读后处理
1、读前处理: BEGIN{awk_cmd1;awk_cmd2}
2、行处理:寻址命令
寻址方法:正则、变量、比较和关系运算
正则需要用//包围起来
awk -F: '/root/{print}' gad
awk -F: '$1~/root/{print}' gad 第一列匹配
awk -F: '$1~/<root>/{print}' gad 第一列匹配,锁定字符串匹配
awk -F: '$1!~/root/{print}' gad
. 除了换行符以外的任意单个字符
[] 字符组内的任一字符
[^]对字符组内的每个字符取反(不匹配字符组内的每个字符)
[ ] 非字符组内的字符开头的行
3、读后处理END{awk_cmd1;awk_cmd2}
awk -F "" '{for(i=1;i<=NF;i++) print $i}' gad.txt 逐字换行
NF代表每行的元素个数
NR 表示AWK读入的行数 (一共处理多少行,无论多少个文件)
FNR表示读入行所在文件中的行数 (每个文件中有多少个文件)
1 1 AAAA
2 2 aaaa
3 3 a
4 1 bb
5 2 bbbbbbbb
赋值 = ++ -- += 。。。
awk 'BEGIN{a=1;print a++;print a}' 先执行命令然后a+1
|| 逻辑或 && 逻辑与 ! 取反
匹配正则或不匹配,正则需要用/正则/ 包围住
~ !~
关系比较字符串时要把字符串用双引号引起来
< <= > >= != ==
转义序列
自身 $ 转义$ 制表符 退格符
回车符
换行符 c 取消换行
-v可以借用此方式从shell变量中引入
a=root
awk -v var=$a -F':' '$1==var{print $1}' passwd
a= whoami ; awk -v var=$a -F':' '$1==var{print $3,$6}' /etc/passwd
FS 定义字段分隔符,默认为一个空格
OFS 输出的字段分隔符,默认为一个空格
root-0-root
bin-1-bin
root@@0##root
bin@@1##bin
RS 记录分隔符,默认为一个换行符
head -2 /etc/passwd | awk 'BEGIN{ RS=":"}{print}' 把:号换成了换行符
ORS 输出的记录分隔符,默认为一个换行符
head -2 /etc/passwd | awk 'BEGIN{ ORS="-"}{print}' 把换行符换成了 - 号
FILENAME 文件名
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 输出系统环境变量
root
Ⅷ awk 在shell命令中怎么用
1.awk
'{print$4}'
spinout
此命令是用来提取文本的第四列
要注意格式
awk与单引号要有空格
后面一个单引号与文件名也有空格
2.如果要提取文本第四行的话
awk
'NR==4{print}'
spinout
也可用sed来提取第四行
比较简单
sed
-n
4p
spinou
Ⅸ shell查出文件行号减1
可以使用以下命令来实现在Shell中查出文件行号减枯滑颤1的操作:
```
awk 'NR==LINE-1 {print $0; exit}' FILE_NAME
```
将上述命令中的LINE替换为需要查找的行号即可。该命令使用awk命令,NR表示当前行号,$0表示当前行内容,print $0表示输出当前行内容。通过对NR进行判断,找到需要查找的行并输出内容。使用exit命令退出循环。由于你需要输出的是查找到的行的上一行内容,因此需要将查找到的行号减一。FILE_NAME表示需要查找的文件名。
例如,如果需要查找文件test.txt中第5行没败的上一行内容,可以使用以下命令:
```
awk 'NR==4 {print $0; exit}' test.txt
```
上面的命令会输出test.txt中第4行的内容,即第5行的上一行。让漏
Ⅹ awk命令详解是什么
awk命令详解:派扰侍awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本:awk、nawk和gawk,未作特别说明,一般指gawk,gawk是AWK的GNU版本。
使用方法:
尽管操作可能会很复杂,但语法总是这样,其中pattern表示AWK在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
通常,awk是以文件的一尘吵行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
以上内容参考:李绝网络-Shell编程