千家信息网

Linux文本分析命令awk的用法

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"Linux文本分析命令awk的用法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Linux文本分析命令awk的用法"吧!0、基本用法aw
千家信息网最后更新 2026年11月02日Linux文本分析命令awk的用法

本篇内容主要讲解"Linux文本分析命令awk的用法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Linux文本分析命令awk的用法"吧!

0、基本用法

awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理

awk命令格式如下

awk [-F field-separator] 'commands' input-file(s)

[-F 分隔符]是可选的,因为awk使用空格,制表符作为缺省的字段分隔符,因此如果要浏览字段间有空格,制表符的文本,不必指定这个选项,但如果要浏览诸如/etc/passwd文件,此文件各字段以冒号作为分隔符,则必须指明-F选项

echo "this is a test" | awk '{ print $0 }'  ## 输出为  this is a test

shell读取用户输入的字符串发现|,代表有管道。|左右被理解为简单命令,即前一个(左边)简单命令的标准输出指向后一个(右边)标准命令的标准输入

awk会根据分隔符将行分成若干个字段,$0为整行,$1为***个字段,$2 为第2个地段,依此类推…

为打印一个字段或所有字段,使用print命令。这是一个awk动作

echo "this is a test" | awk '{ print $1 }'  ## 输出为  this  echo "this is a test" | awk '{ print $1, $2 }'  ## 输出为  this is

/etc/passwd的文件内容如下

root:x:0:0:root:/root:/bin/bash  bin:x:1:1:bin:/bin:/sbin/nologin  daemon:x:2:2:daemon:/sbin:/sbin/nologin  adm:x:3:4:adm:/var/adm:/sbin/nologin  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

举几个简单的小需求

1、只显示/etc/passwd的账户

awk -F : '{ print $1 }' /etc/passwd  ## 输出为  root  bin  daemon  adm  lp

2、显示/etc/passwd的第1列和第7列,用逗号分隔显示,所有行开始前添加列名start1,start7,***一行添加,end1,end7

awk -F ':' 'BEGIN {print "start1,start7"} {print $1 "," $7} END {print "end1,end7"}' /etc/passwd  ## 输出为  start1,start7  root,/bin/bash  bin,/sbin/nologin  daemon,/sbin/nologin  adm,/sbin/nologin  lp,/sbin/nologin  end1,end7

BEGIN语句在所有文本处理动作执行之前被执行,END在所有文本处理动作执行之后被执行

3、统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整行内容

awk -F : '{ print NR "  " NF "  " $0 }' /etc/passwd  ## 输出为  1    7   root:x:0:0:root:/root:/bin/bash  2    7   bin:x:1:1:bin:/bin:/sbin/nologin  3    7   daemon:x:2:2:daemon:/sbin:/sbin/nologin  4    7   adm:x:3:4:adm:/var/adm:/sbin/nologin  5    7   lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

1、支持内置变量

上面示例中NR,和NF其实就是awk的内置变量,一些内置变量如下

变量名解释
FILENAMEawk浏览的文件名
FS设置输入字段分隔符,等价于命令行-F选项
NF浏览记录的字段个数
NR已读的记录数

2、支持函数

输出字符串的长度

awk 'BEGIN { print length("this is a text") }'  ## 输出为  14

将/etc/passwd的用户名变成大写输出

awk -F ':' '{ print toupper($1) }' /etc/passwd  ## 输出为  ROOT  BIN  DAEMON  ADM  LP

常用函数如下

函数名作用
toupper(s)返回s的大写
tolower(s)返回s的小写
length(s)返回s长度
substr(s,p)返回字符串s中从p开始的后缀部分

3、支持条件操作,正则表达式匹配

显示/etc/passwd中有daemon的行

awk -F ':' '$0 ~ /daemon/' /etc/passwd  ## 输出为  daemon:x:2:2:daemon:/sbin:/sbin/nologin

awk条件操作符

操作符描述
<小于
<=小于等于
==等于
!=不等于
~匹配正则表达式
!~不匹配正则表达式

4、支持流程控制语句,类C语言

if while do/while for break continue

输出***个字段的***个字符大于d的行

awk -F ':' '{ if ($1 > "d") { print $1 } else { print "-" } }' /etc/passwd  ## 输出为  root  -  daemon  -  lp

可以把流程控制语句放到一个脚本中,然后调用脚本执行,如test.sh的内容如下

{       if ($1 > "d") {          print $1       } else {          print "-"       }   }

用如下方式执行,效果一样

awk -F ':' -f test.sh /etc/passwd  ## 输出为  root  -  daemon  -  lp

5、应用场景

小编用awk进行文本分析比较少,主要用来写脚本

如一个weibo-interface-1.0.jar应用,启动脚本如下

start.sh

nohup java -jar weibo-interface-1.0.jar >out 2>&1 &

关闭脚本如下,kill.sh

kill -9 `jps -l | grep 'weibo-interface-1.0.jar' | awk '{print $1}'`

jps -l的输出如下

70208 com.st.kmp.main.KmpService  31036 com.st.cis.main.BaiduAnalysisService  66813 weibo-interface-1.0.jar

还有就是关闭hadoop集群的所有DataNode节点(不知道hadoop的可以认为DataNode是一个集群应用),假如一个个机器jps,查看pid,kill。很麻烦,直接写了一个脚本,依次ssh到各个节点,然后执行如下命令即可

kill `jps | grep 'DataNode' | awk '{print $1}'`

jps的输出为

508 DataNode  31481 JournalNode  31973 NodeManager

到此,相信大家对"Linux文本分析命令awk的用法"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

输出 命令 字段 文本 分析 分隔符 文件 脚本 内容 变量 字符 支持 浏览 函数 制表符 动作 字符串 就是 标准 正则 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 互联网和科技创新 科技与互联网发展 金融科技 互联网金融 互联网科技英文翻译 金融科技和互联网金融 互联网科技生活的内容 科技大学互联网专业好不好 互联网科技公司需要的职位 玖二柒互联网科技公司待遇 北京华百购互联网科技有限公司 厦门比较好的科技互联网公司 湖北码尼互联网科技有限公司电话 厦门千工互联网科技有限公司 语蝶互联网科技有限公司 互联网时代的科技公司 广州智享互联网科技 中国科技和美国互联网 网互联网络科技 小牛互联网科技有限公司地址 科技赋能下的互联网金融 亿策互联网科技 农村开互联网科技讲堂 互联网科技中介 佳云科技和互联网广告 全球顶尖互联网科技公司 苏州铭阳互联网科技有限公司 浙南科技城互联网大厦建设工程 西安有哪些互联网高科技企业 互联网的科技体现在哪里
0