Linux文本三剑客之awk编辑器(热爱漫无边际)(一)

简介: Linux文本三剑客之awk编辑器(热爱漫无边际)(一)
+关注继续查看

前言


我们将/etc/passwd文件拷贝到/data下做实验,以免影响系统


一、awk特点和应用场景


一门语言,类似于c语言

过滤、统计、计算

过滤统计日志

三个作者的名字缩写组成


二、awk执行


image


2.1 工作原理

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令;

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”再进行处理;

awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示;

在使用awk命令的过程中,可以使用逻辑操作符“&&”表示与、“||”表示或、“!”表示非,还可以进行简单的数学运算如+-*/%^,分别表示加减乘除取余和乘方

2.2 命令格式

awk 选项 '模式或条件{操作}'  文件1  文件2
awk -f 脚本文件 文件1  文件2 ...

2.3 行与列

名词

awk中的叫法

一些说明

记录record

每一行默认通过回车分割的

字段,域 field

每一列默认通过空格分割的

awk中默认的东西都是可以修改的


2.3.1 取行

awk


NR==1

取出某一行

NR>=1&&NR<=5

取出1-5行范围

$0

整行

/old/

过滤

/100/,/110/

100到110行

符号

<> >= <= == !=

#取第一行
[root@localhost data]# awk 'NR==1' users.txt 
1,zhangsan
#取1-3行,空格可加可不加
[root@localhost data]# awk 'NR>=1 && NR<=3' users.txt 
1,zhangsan
2,lisi
3,wangwu
#非文本内容取行
[root@localhost data]# ll |awk 'NR==2'
-rw-r--r--. 1 root root  172 4月  12 09:45 1.tar.gz
[root@localhost data]# ll |awk 'NR==2{print $0}'
-rw-r--r--. 1 root root  172 4月  12 09:45 1.tar.gz

image


image


image


2.3.2 取列

-F   指定分隔符, 指定每一列结束标记(默认是空格,连续的空格,tab键)

$数字   取出某一列;注意:在awk中$内容就一个意思,表示取出某一列

column -t  文本对齐

$NF  表示最后一列

#取出ls -l 文件大小的那一列
[root@localhost data]# ll
总用量 44
-rw-r--r--. 1 root root  172 4月  12 09:45 1.tar.gz
-rw-r--r--. 1 root root   96 4月  20 15:16 config
-rw-r--r--. 1 root root   48 4月  12 09:45 host_ip
-rw-r--r--. 1 root root   70 4月  12 09:45 ip.txt
-rw-r--r--. 1 root root   81 4月  21 00:58 out1.txt
-rw-r--r--. 1 root root   79 4月  21 00:58 out2.txt
-rw-r--r--. 1 root root 2169 4月  19 14:59 passwd
-rw-r--r--. 1 root root   78 4月  21 00:53 script.sed
drwxr-xr-x. 8 root root 4096 4月  16 15:42 sh
drwxr-xr-x. 2 root root  240 4月  12 09:45 test
-rw-r--r--. 1 root root   54 4月  20 14:44 users.txt
-rw-r--r--. 1 root root   69 4月  15 12:38 丢包.txt
[root@localhost data]# ll |awk '{print $5}'
172
96
48
70
81
79
2169
78
4096
240
54
69
#查看大小和文件名,并对齐显示
[root@localhost data]# ll |awk '{print $5,$9}'
172 1.tar.gz
96 config
48 host_ip
70 ip.txt
81 out1.txt
79 out2.txt
2169 passwd
78 script.sed
4096 sh
240 test
54 users.txt
69 丢包.txt
[root@localhost data]# ll |awk '{print $5,$9}' |column -t
172   1.tar.gz
96    config
48    host_ip
70    ip.txt
81    out1.txt
79    out2.txt
2169  passwd
78    script.sed
4096  sh
240   test
54    users.txt
69    丢包.txt
#取出passwd的第一列和最后一列
[root@localhost data]# awk -F: '{print $1,$NF}' passwd |column -t
root                 /bin/bash
bin                  /sbin/nologin
daemon               /sbin/nologin
adm                  /sbin/nologin
lp                   /sbin/nologin
sync                 /bin/sync
shutdown             /sbin/shutdown
halt                 /sbin/halt
mail                 /sbin/nologin
operator             /sbin/nologin
games                /sbin/nologin
#将passwd的第一列和最后一列交换
[root@localhost data]# awk -F: -vOFS=: '{print $NF,$2,$3,$4,$5,$1}' passwd 
/bin/bash:x:0:0:root:root
/sbin/nologin:x:1:1:bin:bin
/sbin/nologin:x:2:2:daemon:daemon
/sbin/nologin:x:3:4:adm:adm
/sbin/nologin:x:4:7:lp:lp
/bin/sync:x:5:0:sync:sync
/sbin/shutdown:x:6:0:shutdown:shutdown
/sbin/halt:x:7:0:halt:halt
/sbin/nologin:x:8:12:mail:mail
/sbin/nologin:x:11:0:operator:operator
/sbin/nologin:x:12:100:games:games


image


image


image


image


image


说错了,是第一列和最后一列交换,只需$1和$NF

image


2.3.3 小结

行与列名称

awk取行与取列

取出网卡IP地址(同时取行取列)

#取出IP地址
[root@localhost data]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.109.131  netmask 255.255.255.0  broadcast 192.168.109.255
        inet6 fe80::45b4:7459:c87e:dc54  prefixlen 64  scopeid 0x20<link>
[root@localhost data]# ifconfig |awk 'NR==2' |awk -F"[ ]+" '{print $3}'
192.168.109.131
[root@localhost data]# ifconfig |awk -F"[ ]+" 'NR==2{print $3}'
192.168.109.131

image

目录
相关文章
|
2天前
|
数据可视化 Linux 程序员
Linux编辑器:vim的简单介绍及使用
Linux编辑器:vim的简单介绍及使用
|
2天前
|
Unix Linux 程序员
【Linux学习】vim编辑器的使用
【Linux学习】vim编辑器的使用
24 0
|
2天前
|
数据可视化 Linux 开发工具
【Linux】开发工具——vim多模式编辑器的入土&&设置sudoers白名单
通过前面几篇文章的学习我们已经对Linux操作系统算是比较了解了,可以熟练的使用一些指令,我们就要进入Linux下的系统编程。在Windows系统下可以安装各种集成开发环境像Dev-C++、VC6.0、VS等等,在这些软件中我们不仅可以写代码,软件也可以完成编译、链接,甚至是调试等一系列功能。而在我们Linux系统中编写代码、编译代码、调试代码可以说都是分开的,使用各种工具完成。例如:编写代码使用vim多功能编辑器、编译代码使用gcc/g++编译器、调试代码使用gdp调试器。今天给大家带来的是vim多功能编辑器的使用。
|
2天前
|
IDE 数据可视化 Linux
Linux | 人生苦短,我用Vim【最受欢迎的编辑器】-1
Linux | 人生苦短,我用Vim【最受欢迎的编辑器】
21 0
|
2天前
|
Linux 程序员 开发工具
Linux | 人生苦短,我用Vim【最受欢迎的编辑器】-2
Linux | 人生苦短,我用Vim【最受欢迎的编辑器】
31 0
|
18天前
|
Shell Linux 开发工具
Linux加强篇004-Vim编辑器与Shell命令脚本
山重水复疑无路,柳暗花明又一村
210 1
Linux加强篇004-Vim编辑器与Shell命令脚本
|
20天前
|
Linux 开发工具 C++
[linux]vim编辑器
[linux]vim编辑器
|
2月前
|
NoSQL Linux 编译器
详讲yum包管理器/Vim编辑器/gdb调试器的基础用法【Linux】
详讲yum包管理器/Vim编辑器/gdb调试器的基础用法【Linux】
21 0
|
2月前
|
Ubuntu Linux API
16 个 Linux 最佳 Markdown 编辑器(2)
16 个 Linux 最佳 Markdown 编辑器(2)
23 0
|
2月前
|
Linux 开发工具 iOS开发
16 个 Linux 最佳 Markdown 编辑器(1)
16 个 Linux 最佳 Markdown 编辑器(1)
73 1
相关产品
云迁移中心
推荐文章
更多