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)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...
随机推荐
- 算法-heapq模块优先队列
heapq模块, 优先队列,小顶堆,最少值放在顶部,值越小,优先级越高 heapq.heappop(heap) 从堆中弹出最小的元素,并重新调整 heapq.heappush(heap, item)新 ...
- 区块链入门到实战(36)之Solidity – 运算符
Solidity – 算术运算符 Solidity 支持的算术运算符,如下表所示: 假设变量A的值为10,变量B的值为20. 序号 运算符与描述 1 + (加)求和例: A + B = 30 2 – ...
- Redis入门--进阶详解
Redis NoSql入门和概述 入门概述 互联网时代背景下大机遇,为什么用nosql 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付,在那个时候, ...
- Mac包管理神器:Home-brew
最近看到一个大神修改的Homebrew国内脚本,安装非常方便,以前使用国外的经常下载不下来,这个感觉是非常快的. Homebrew 国内自动安装脚本 ,修改原脚本中的 clone 操作为“浅拷贝”(- ...
- 使用【QQ五笔的码表】转成【百度手机自定义码表】
使用[QQ五笔码表]转成[百度手机自定义码表] QQ五笔码表先转成多多格式. 这里选用极点>>多多. 然后去掉空格. 转成GB.去掉没的字. 百度要的是这种格式. 现再用点讯工具转成 de ...
- asterisk PBX 对接中国移动IMS
前提: 最近有项目需求,需要对接移动的IMS,移动的对接同事给出了信息: 用户名:+86750735xxxx@ims.gd.chinamobile.com 密码:123456 (系统导入的号码,默认 ...
- CRMEB小程序商城v4.0二次开发对接集成阿里云短信
作者:廖飞 - CRMEB小程序商城研发项目组长 前言 cremb小程序商城v4.0版本支持短信平台为云信,但有部分用户有需求对接阿里云短信,这篇文章将对阿里云短信平台如何对接方以及对接流程详细说明. ...
- 【Docker】Docker安装运行dubbo-admin
运行dubbo-admin服务, 此服务需要单独启动一个zookeeper容器 dubbo-admin将监听所有注册到zookeeper的服务, dubbo-admin默认端口8080 1 运行一个z ...
- 构造清华大学的yum源
[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# vim qinghua.repo [qinghua] na ...
- P4719 【模板】"动态 DP"&动态树分治
题目描述 给定一棵 n 个点的树,点带点权. 有 m 次操作,每次操作给定 x,y,表示修改点 x 的权值为 y. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 输入格式 第一行有两个整数 ...