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的一些认识的更多相关文章

  1. awk命令简介

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  2. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

  3. awk应用

    h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...

  4. 3.awk数组详解及企业实战案例

    awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...

  5. shell——awk

    awk -F"分隔符" "command" filename awk -F":" '{print $1}' /etc/passwd 字段引用 ...

  6. 【Linux】AWK入门

    什么是AWK AWK是一种用于处理文本的编程语言工具,一个模式匹配程序.一个典型的示例是将数据转换成格式化的报告. 在命令行输入如下awk命令: awk -F":" '{ prin ...

  7. 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od

    awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk ''  | output 1.首先要知道形式 awk 'command' fi ...

  8. sed awk grep三剑客常用

    sed的常用用法: awk的常用用法: grep的常用用法: 除了列出符合行之外,并且列出后10行. grep -A 10 Exception kzfinance-front.log 除了列出符合行之 ...

  9. awk命令速查

    awk与sed.grep一样都是为了加工数据流而做成的文本加工过滤器命令.awk会事先把输入的数据根据字段单位进行分割.在没有制定分割单位的情况下,以输入数据中的空格或Tab为分隔符.与sed相比,它 ...

  10. Sed、Awk单行脚本快速参考

    文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...

随机推荐

  1. lammps-MD整体思路

    1.收敛性测试 (1)由不同尺寸模型(不同的原子数)和E的关系曲线,再确定尺寸n*n*n: 2.优化结构(nve-nvt-npt) 系综的实现方式(相关命令):https://www.cnblogs. ...

  2. shazidouhuiapp

    在选择了软件工程专业之后,指导教师也让我们参加到了学长学姐的作业之中来,使用学长学姐们的软件并写出自己的使用评价以及自己的一些小评价. 我这次体验的是第三组的学长学姐们的软件,他们的队名叫天公疼憨仔, ...

  3. 网站seo整站优化有什么优势

    http://www.wocaoseo.com/thread-314-1-1.html       现在很多企业找网络公司做网站优化,已经不再像以前那样做目标关键词,而是通过整站优化来达到企业营销目的 ...

  4. Vue基础(二)---- 常用特性

    常用特性分类: 表单操作 自定义指令 计算属性 侦听器 过滤器 生命周期 补充知识(数组相关API) 案例:图书管理 1.表单操作 基于Vue的表单操作:主要用于向后台传递数据 Input 单行文本 ...

  5. 解析WAV音频文件----》生成WAV音频文件头

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i WAV音频文件介绍: WAV文件是在PC机平台上很常见的.最经典的多媒体音频文件,最早于1991年8月出现在Windows3.1操作系统 ...

  6. 今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!

    先来简单了解一下MySQL数据库有意思的简介 MySQL这个名字,起源不是很明确.一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上, 而且不管怎样,MySQL AB创始 ...

  7. JVM 垃圾收集算法 标记-清楚、标记-复制、标记-整理

    摘要 Java程序在运行过程中会产生大量的对象,但是内存大小是有限的,如果光用而不释放,那内存迟早被耗尽.如C.C++程序,需要程序员手动释放内存,Java则不需要,是由垃圾回收器去自动回收. 垃圾回 ...

  8. Linux下命令设置别名--alias(同实用于mac)

    最近在搞appium自动化脚本编写,过程中经常会使用 uiautomatorviewer这个工具查看UI布局和元素,但是不得不说这个单词太长了.. 如何快速使用,有三个小技巧,分别是: 1.设置好改工 ...

  9. 精选PDF版本书籍第一期

    福利概述 精选JAVA必读书籍的PDF版本(来源于网络,侵删). Effective java 中文版(第2版) Head First 设计模式(中文版) Java并发编程的艺术 Java技术手册(第 ...

  10. termux 进阶

    直接正题. 1.优化键位: mkdir $HOME/.termux echo "extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'], ...