Linux三剑客之 awk 的基本用法

前言

在Linux中,awk是一个非常重要的、更是强大的文本处理工具
学会awk将会使你的工作变得更加的轻松,当然最重要的是…高大上啊,咳咳
好,废话不多说,进入正题了

正文

首先记住几个特殊变量

  • NR:这个变量可以用来表示行号
  • NF:这个变量可以用来表示列号
  • $1 : 表示当前记录的第一列的文本内容
  • $2 :表示当前记录的第二列的文本内容

然后再记住几个重要的参数

  • sort :排序,但是是按照一个数值得第一个数字大小进行排序。比如:1,5,11,22的排序就是1, 11, 22, 5
  • uniq -c:去重(统计):对重复出现的数值,每出现一次将其出现的次数+1
  • sort -n :排序,是按照数值的大小进行排序1, 5, 11, 22 的排序就是1, 5, 11, 22
awk实用理解案例

1、指定awk的字段分隔符【默认是以空格为分隔符】

$ awk -F: '{ print $1 }' /etc/passwd
$ awk 'BEGIN{ FS=":" }{ print $1 }' /etc/passwd
# 这里有两种方法,一种是直接 -F: 指定分隔符为:  一种是通过BEGIN{ FS=":" }

2、指定打印文件中的第2列和第3列

$ awk -F: '{ print $2, $3 }' /etc/passwd
x 0
x 1
x 2
x 3

3、统计文件/etc/passwd的行数,打印出所有的行号

$ awk '{ print NR }' /etc/passwd
...
...
39
40
41

4、打印第1行的第7列

$ awk -F: 'NR==1{ print $7 }' /etc/passwd
/bin/bash
# NR代表行号,NR==1就表示是第一行

5、打印最后一列和倒数第四列

awk -F: '{ print $(NF), $(NF-3) }' /etc/passwd
/sbin/nologin 72
/sbin/nologin 25
/sbin/nologin 38
# 直接写$(NF) 指的就是最后一列
# 如果是$(NF-3) 减去3,就是倒数第四列

5、在命令行中,传递变量到awk中

$ var=5000
$ echo | awk -v variable=$var '{ print variable }'
5000
# awk起到的是一个中间变量的作用
# 在awk中需要再次声明一个中间变量,这里是variable
# 把在在awk中声明的中间变量bariable传递给print

6、在脚本中,传递多个变量到awk中

$ var1="Variable01" ; var2="Variable02"
$ echo | awk '{ print v1, v2 }' v1=$var1 v2=$var2

7、换行

# print: 在每次输出的后面加一个\n来换行,而printf不会。
# 所以printf的所有输出都挤在一行中
#而print每次输出后都会自动换行
$ awk 'BEGIN{ FS=":" }{ printf $1 }' /etc/passwd
rootbindaemonadmlpsyncshutdown
$ awk 'BEGIN{ FS=":" }{ print $1 }' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown

8、排序(从日志文件access.log中统计出访问的IP,并且进行排序 输出到文件text.txt)

$ awk 'BEGIN{ FS=" " }{ print $1 }' access.log | sort >> text.txt
# sort 就是对awk切出来的第一列的文本按照第一个数字的大小进行排序

9、去重统计(针对第步8的输出进行统计每一个IP访问了多少次)

$ awk 'BEGIN{ FS=" " }{ print $1 }' access.log | sort | uniq -c >> text.txt
170 112.66.41.143
329 223.198.168.116
243 112.66.32.178
555 54.227.74.125
215 121.58.53.171
# uniq -c 就是进行统计每一个IP出现了多少次

10、如果我们希望对统计的结果进行排序,按照访问次数从多到少降序排序

$ awk 'BEGIN{ FS=" " }{ print $1 }' access.log | sort | uniq -c | sort -nr >> text.txt
555 54.227.74.125
329 223.198.168.116
243 112.66.32.178
215 121.58.53.171
170 112.66.41.143

 - $1:打印出第11列、排序、去重【统计】
 - 
 - sort:排序,但是是依据首个字符的大小,所以要加上参数n和r
 -n:number 按照数值的大小进行升序排序
 -r: reverse反转【升序-->>降序 降序-->>升序】
 

补充:
 - 第一次的sort绝对不能少,首先要排好序,然后再进行去重统计
 - 否则很可能同一个ip在前面统计出三次,,后边又统计出5次
 - 实际上就是因为少了第一次的sort
 - 这个ip其实一共是出现了8次

优秀是一种选择,也是一种态度

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux三剑客指的是 awk、sed 和 grep。 awk 是一种用来处理文本文件的工具,它可以根据指定的模式进行自动分割并进行数据处理。 sed 是一种流编辑器,它可以对文本文件进行替换、删除和插入操作。 grep 是一种文本搜索工具,它可以在文本文件中搜索指定的字符串。 ### 回答2: Linux三剑客,分别是awk、sed和grep,它们是Linux系统中非常重要的命令行工具,它们通常被称为文本处理工具。这些工具通常被用于筛选、搜索和处理文本文件。 grep是一种常见的文本搜索工具,可以在文件和文件夹中搜索指定的字符串或正则表达式。grep可以搜索多个文件并返回匹配行的输出。它是处理日志文件或查找匹配模式的最佳工具之一。 sed是一种流编辑器,可以按照行处理文本文件。它可以通过替换、删除和插入操作来修改文件内容。在大型文件中查找并替换模式是sed的主要作用。该工具通常在文本文件中提取有用信息是常用。 awk是一种强大的文本操作工具,可以分析大型文本文件并对其进行处理。该工具可以遍历行和列,并提供强大的文本处理工具,如计算、过滤和转换数据。awk的处理速度非常快,适用于处理大型数据文件。 Linux三剑客awk是最强大的工具,它可以执行复杂的文本数据操作和转换,可大大简化开发和管理过程。sed主要用于简单的文本数据过滤和替换,而grep主要用于搜索文件和定位特定行。 总之,Linux三剑客在文本数据处理方面具有不可替代的重要作用。对于Linux操作系统的开发人员和管理员来说,熟练使用这些工具可以提高他们的工作效率,使他们更容易管理和操作文本文件。 ### 回答3: Linux三剑客awk sed grep是我们在日常工作中经常使用的三个命令。它们都属于文本处理工具,可以用于查找、处理、分析文本文件等。 首先,grep是最常用的文本搜索工具。grep可以用来快速查找文件中指定的字符串或正则表达式,并将包含该字符串或正则表达式的行打印出来。常用的命令有grep、egrep和fgrep。比如,我们可以使用grep命令来查找一个文件中包含指定关键字的行,可以使用egrep来支持正则表达式搜索,使用fgrep来进行快速搜索,不支持正则表达式。 其次,sed是一种流编辑器,主要用于对文本文件进行替换、删除、添加、插入等操作。sed命令可以通过管道(|)将多个命令组合起来,从而进行复杂的文本操作。sed可以快速完成对文本文件的修改操作,比如替换文件中的某些内容、删除特定的行、在文件中插入新的文本等。sed的命令形式是“command", 比如"s/old/new/g",表示将old替换成new。 最后,awk是一种强大的文本处理工具,主要用于在文本文件中查找、处理以及格式化特定的字段。和grep、sed不同的是,awk更加灵活,可以在处理过程中做到数据过滤和加工,对于大数据的处理特别有用。awk命令的常用语法是"pattern {action}"。其中,pattern代表要匹配的模式,而action代表模式匹配时需要执行的动作,我们可以在其中添加处理语句来对文件进行各种处理操作,比如计算、统计、格式化等。 综上所述,Linux三剑客awk sed grep是我们在文本处理工作中不可或缺的三个工具,不同的工具可以用于处理不同的文本操作,也可以用于搭配使用,以完成更加复杂的文本处理工作。对于需要经常处理文本的人员来说,掌握这些工具是非常必要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值