系统相关
首页 > 系统相关> > Linux三剑客之awk命令

Linux三剑客之awk命令

作者:互联网

  awk是一种模式扫描和处理语言,它是功能非常强大的文档编辑工具,它不仅可以以行为单位,还能以列为单位进行文件处理。下面以以下三个方面来学习它:

一、格式详解

 1、命令格式

2、常用参数

3、常用动作

动作有三部分组成,分别是:

常用的动作有print (显示内容):

4、内置变量

当然该命令还可以使用如下的一些内置变量:

二、简单实践

 1、内容查看

# 文件内容
[root@localhost thrid_dir]# cat awk.txt 
aa AA AA1
aa BB BB1
cc CC CC1

# 查看文件全部列'{print}'相当于'{print $0}'
[root@localhost thrid_dir]# awk '{print}' awk.txt 
aa AA AA1
aa BB BB1
cc CC CC1

# 查看第一列内容
[root@localhost thrid_dir]# awk '{print $1}' awk.txt 
aa
aa
cc

# 查看第1,3列内容
[root@localhost thrid_dir]# awk '{print $1,$3}' awk.txt 
aa AA1
aa BB1
cc CC1
 
# 查看第1,3列内容
[root@localhost thrid_dir]# awk '{print $1$3}' awk.txt 
aaAA1
aaBB1
ccCC1

# 查看行号,1,3列内容
[root@localhost thrid_dir]# awk '{print NR,$1,$3}' awk.txt 
1 aa AA1
2 aa BB1
3 cc CC1

# 查看正则内容
[root@localhost thrid_dir]# awk '/aa/' awk.txt 
aa AA AA1
aa BB BB1

2、参数实战

awk默认指定的列分隔符是空格,如果对于/etc/password文件就不能取出对应的列,因为中间是以':'分隔,所以需要指定分隔符。

[root@localhost thrid_dir]# cat /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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
...
[root@localhost thrid_dir]# awk -F ':' '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
...

编写脚本,进行格式化。

# 编写format格式文件
[root@localhost thrid_dir]# cat format 
/aa/{print "第" NR "行:" "内容:" $0}

# 加载格式文件
[root@localhost thrid_dir]# awk -f format awk.txt 
第1行:内容:aa AA AA1
第2行:内容:aa BB BB1
# 传入单值
[root@localhost thrid_dir]# echo | awk -v var=10 '{print var}' 
10

# 传入多值
[root@localhost thrid_dir]# echo | awk '{print v1,v2}' v1=100 v2=200 
100 200

 3、动作实战

动作是由三部分组成的,下面说明一下BEGIN和END是如何简单使用的,比如格式化输出:

# 文件内容
[root@localhost thrid_dir]# cat awk.txt 
aa AA AA1
aa BB BB1
cc CC CC1

# 指定分隔符输出
[root@localhost thrid_dir]# awk 'BEGIN{OFS=":"}{print NR,$1,$2}' awk.txt 
1:aa:AA
2:aa:BB
3:cc:CC

# 指定样式输出
[root@localhost thrid_dir]# awk 'BEGIN{print "--开始输出--"}{print NR,$1,$2}END{print "--结束输出--"}' awk.txt 
--开始输出--
1 aa AA
2 aa BB
3 cc CC
--结束输出--

三、进阶实战

 1、fi语句

输出/etc目录中大于500字节的普通文件:

[root@localhost etc]# ll /etc/ | awk '{if (($5>500 && /^-/)) print "文件类型:" $1,"\t文件大小:"$5,"\t文件:"$9}'
文件类型:-rw-r--r--.     文件大小:1518     文件:aliases
文件类型:-rw-r--r--.     文件大小:12288     文件:aliases.db
文件类型:-rw-------.     文件大小:541     文件:anacrontab
文件类型:-rw-r--r--.     文件大小:2853     文件:bashrc
文件类型:-rw-r--r--.     文件大小:1165     文件:chrony.conf
文件类型:-rw-r--r--.     文件大小:1620     文件:csh.cshrc
文件类型:-rw-r--r--.     文件大小:841     文件:csh.login
文件类型:-rw-r--r--.     文件大小:5090     文件:DIR_COLORS
...

awk中的if语句格式:

2、for语句

[root@localhost ~]# echo 'abcdefgh'|awk -F '' '{for(i=1;i<=NF;i++) print $i}'a
b
c
d
e
f
g
h

awk中的if语句格式:

 

标签:aa,thrid,awk,Linux,print,root,localhost,三剑客
来源: https://www.cnblogs.com/shenjianping/p/14392140.html