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

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

前言


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


一、awk特点和应用场景


一门语言,类似于c语言

过滤、统计、计算

过滤统计日志

三个作者的名字缩写组成


二、awk执行



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




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







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


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

目录
相关文章
|
2月前
|
Ubuntu Linux 测试技术
Linux系统之部署轻量级Markdown文本编辑器
【10月更文挑战第6天】Linux系统之部署轻量级Markdown文本编辑器
143 1
Linux系统之部署轻量级Markdown文本编辑器
|
1天前
|
监控 Linux 数据处理
Linux grep技巧 结合awk查询
结合 `grep` 和 `awk`,可以实现灵活、高效的文本处理和数据分析。`grep` 用于快速过滤符合条件的行,`awk` 用于进一步处理和提取数据。这种组合使用在日志分析、数据处理和系统监控等场景中尤为常见。掌握这两者的基本用法和组合技巧,可以大大提升在 Linux 环境下的工作效率。
21 7
|
4月前
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
1月前
|
Linux 开发工具
linux文本管理命令
本文档介绍了Linux系统中常用的文本处理命令,包括`echo`、`cat`、`head`、`tail`、`wc`、`less`、`grep`以及重定向符号的使用方法和练习题。此外,还详细讲解了VIM编辑器的特点、工作模式、常用快捷键和高级技巧,帮助用户高效地进行文本编辑和处理。
49 4
|
2月前
|
Linux Perl
Linux awk命令使用技巧
【10月更文挑战第16天】Linux awk命令使用技巧
49 4
|
2月前
|
存储 安全 Linux
Linux文件管理命令md5sum awk
通过结合 `md5sum`和 `awk`,不仅可以高效地进行文件完整性校验,还能灵活地处理和分析校验结果,为系统管理、数据审计等工作提供强大的支持。
86 2
|
3月前
|
Linux Shell
10-10|linux命令查询 关键字在文本中出现的行数
10-10|linux命令查询 关键字在文本中出现的行数
|
4月前
|
Linux
Linux 系列之 在一个文本中查找指定的数据
文章介绍了在Linux命令行中使用文本搜索功能快速查找指定内容的方法,并提供了按`n`键查找下一个匹配项的技巧。
Linux 系列之 在一个文本中查找指定的数据
|
4月前
|
搜索推荐 Linux 网络安全
Linux系统中的Vim编辑器
【8月更文挑战第21天】Vim是一款功能强大的文本编辑器,在Linux系统中广泛使用。它具有三种基本模式:命令模式,用于执行操作但不能编辑文本;插入模式,允许用户像常规编辑器那样输入文本;底线命令模式,用于保存、退出及查找替换等操作。Vim还支持多窗口编辑、宏录制及插件扩展等功能,并可通过配置文件个性化设置。因其高效性、良好的可移植性和远程编辑能力,Vim特别适用于开发者和系统管理员。
|
4月前
|
Linux 数据处理 Perl
在Linux中,awk命令的如何使用?
在Linux中,awk命令的如何使用?