awk的一些认识
awk
awk '{pattern + action}' {filenames}
当我们所指定的规则脚本过长的时候,我们可以使用-f的选项加上我们的脚本文件。再复杂点我们可以直接调用shell脚本,就像我们在编写python时需要加上解释器一样,我们调用#!/bin/awk这样也可以进行调用。
root@kali:~# awk 'NR==1{print}' testip.txt
192.168.114.1
root@kali:~# awk 'NR==4{print}' testip.txt
192.168.114.4
此处NR作为内置变量功能就是记录个数,也就是行数,那么我们可以利用NR显示具体行数内容。//FNR都是表示总的行数。
root@kali:~# awk 'BEGIN {print "The data3 File Contents:"}
{print}
END {print "End of File"}' testip.txt
The data3 File Contents:
192.168.114.1
192.168.114.2
192.168.114.3
192.168.114.4
192.168.114.5
BEGIN与END关键词。效果如上
root@kali:~# awk '$1 && NR==1 {print}' testip.txt
192.168.114.1
root@kali:~# awk '$2 && NR==1 {print}' testip.txt
$x显示的是具体列数,我们配合逻辑符号,可以进行筛选。我们可以看见,当我们想要查找第二列的时候返回的是空集,这里就说明了是不存在第二列的。//注意$0代表的是整个文本行
root@kali:~# awk '/^$/ {print "Blank line"}' testip.txt
Blank line
这里我们在文档中挖了几个空格,利用正则表达式将所有空白行全部都显示了出来。
root@kali:~# awk '!/3/ && /1/ {print}' testip.txt
192.168.114.1
192.168.114.2
192.168.114.5
192.168.114.6
192.168.114.7
192.168.114.8
192.168.114.9
192.168.114.10
同上我们仍然利用正则表达式选取出了不包含3,但是包含1的那些ip地址。
root@kali:~# awk 'NR==1 {print $1}' testip.txt
192.168.114.1
root@kali:~# awk -F "." 'NR==1 {print $1}' testip.txt
192
root@kali:~# awk -F "." 'NR==1 {print $2}' testip.txt
168
在此处我们可以看到之前我们没有加上-F参数,这样的就过就是分段分了一整段,但是我们利用-F参数指定.为分隔符号,此时我们可以看见自然而然地哪么此时就是以上结果了。
root@kali:~# awk 'BEGIN{system("ifconfig")}'
bridge0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.3.6 netmask 255.255.255.0 broadcast 192.168.3.255
ether 9e:df:30:34:30:af txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3 bytes 234 (234.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.114.128 netmask 255.255.255.0 broadcast 192.168.114.255
inet6 fe80::20c:29ff:fe12:e944 prefixlen 64 scopeid 0x20
ether 00:0c:29:12:e9:44 txqueuelen 1000 (Ethernet)
RX packets 5244 bytes 1430889 (1.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 46 bytes 5063 (4.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 19 base 0x2000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 9 bytes 475 (475.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9 bytes 475 (475.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我们可以利用awk调用系统命令,system函数,当然我们直接放到bash里面也可以进行。
root@kali:~# awk 'BEGIN{print "ifconfig"| "/bin/bash"}'
bridge0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.3.6 netmask 255.255.255.0 broadcast 192.168.3.255
ether 9e:df:30:34:30:af txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3 bytes 234 (234.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.114.128 netmask 255.255.255.0 broadcast 192.168.114.255
inet6 fe80::20c:29ff:fe12:e944 prefixlen 64 scopeid 0x20
ether 00:0c:29:12:e9:44 txqueuelen 1000 (Ethernet)
RX packets 5486 bytes 1496859 (1.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 46 bytes 5063 (4.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 19 base 0x2000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 9 bytes 475 (475.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9 bytes 475 (475.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$n 当前记录的第n个字段,字段间由FS分隔
$0 完整的输入记录
ARGC 命令行参数的数目
ARGIND 命令行中当前文件的位置(从0开始算)
ARGV 包含命令行参数的数组
CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO 最后一个系统错误的描述
FIELDWIDTHS 字段宽度列表(用空格键分隔)
FILENAME 当前文件名
FNR 各文件分别计数的行号
FS 字段分隔符(默认是任何空格)
IGNORECASE 如果为真,则进行忽略大小写的匹配
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
OFMT 数字的输出格式(默认值是%.6g)
OFS 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符
ORS 输出记录分隔符(默认值是一个换行符)
RLENGTH 由match函数所匹配的字符串的长度
RS 记录分隔符(默认是一个换行符)
RSTART 由match函数所匹配的字符串的第一个位置
SUBSEP 数组下标分隔符(默认值是/034)
awk的一些认识的更多相关文章
- awk命令简介
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- awk应用
h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...
- 3.awk数组详解及企业实战案例
awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...
- shell——awk
awk -F"分隔符" "command" filename awk -F":" '{print $1}' /etc/passwd 字段引用 ...
- 【Linux】AWK入门
什么是AWK AWK是一种用于处理文本的编程语言工具,一个模式匹配程序.一个典型的示例是将数据转换成格式化的报告. 在命令行输入如下awk命令: awk -F":" '{ prin ...
- 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od
awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk '' | output 1.首先要知道形式 awk 'command' fi ...
- sed awk grep三剑客常用
sed的常用用法: awk的常用用法: grep的常用用法: 除了列出符合行之外,并且列出后10行. grep -A 10 Exception kzfinance-front.log 除了列出符合行之 ...
- awk命令速查
awk与sed.grep一样都是为了加工数据流而做成的文本加工过滤器命令.awk会事先把输入的数据根据字段单位进行分割.在没有制定分割单位的情况下,以输入数据中的空格或Tab为分隔符.与sed相比,它 ...
- Sed、Awk单行脚本快速参考
文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...
随机推荐
- Centos7 Minimal 版安装后安装图形界面教程
1.执行下面命令安装GNOME Desktop Environment yum -y groups install "GNOME Desktop" 2.安装完成后,执行下面的命令, ...
- Matplotlib&Numpy
Matplotlib 是专门用于开发2D图表(包括3D图表) 以渐进.交互式方式实现数据可视化 实现一个简单的Matplotlib画图 ①导入:matplotlib.pytplot包含了一系列类似于m ...
- 操作系统-文件系统(5)Linux文件系统管理
主流分区机制有MBR和GPT两种 MBR分区:第一个扇区最重要,里面有:引导代码(Bootstrap code area)及分区表(partition table), 其中Bootstrap code ...
- Mybatis动态语句
If元素If元素是简单的条件判断逻辑,满足制定条件时追加if元素的SQL,不满足条件时不追加,使用格式如下: <select ….> SQL语句1 <if test=“条件表达式”& ...
- MPI组操作
进程组的创建 MPI_Comm_Group int MPI_Comm_group( MPI_Comm comm, MPI_Group *group ); 把相同的通信子进程放到一个组内. #inclu ...
- javascript正则用法
一.元字符 . 匹配除了换行符以外的字符. \w 匹配字母或者数字或者下划线 \W 匹配不是字母.数字.下划线 \d 匹配数字,相当于[0-9] \D 匹配不是数字的字符 \s ...
- JVM系列.历史上出现过的Java虚拟机
HotSpot绝对是当今商用虚拟机的王者,但是在Java历史上出现过很多Java虚拟机,这篇文章就来整理下历史上出现过的Java虚拟机以及他们的特性. Sun Classic Sun Classic虚 ...
- smtplib文字邮件的发送
今天跟大家讲解一下接口测试框架的知识准备阶段,首先是发送纯文字的电子邮件,会的同学可以忽略,不会的就多敲几遍,直到自己能敲出来为止~~ # coding: utf-8import smtplibfro ...
- Lua C API 书籍
https://www.oreilly.com/library/view/creating-solid-apis/9781491986301/ https://www.lua.org/notes/lt ...
- 文件操作 -- 生成java文件
import hashlibimport os def genJavaFile(packageName, soFile): className, suffix = soFile.split('. ...