linux系列_linux命令系列一 —— awk命令

awk命令

#命令行方式
awk [-F field-separator] 'commands' input-file(s)
#shell脚本,将所有的awk命令插入一个文件,并使awk执行
首行添加#!/bin/awk
#j将所有的awk命令插入一个单独的文件,让后调用
awk -f awk-script-file input-file(s)

内置变量

ARGC               命令行参数个数ARGV               命令行参数排列ENVIRON            支持队列中系统环境变量的使用FILENAME           awk浏览的文件名FNR                浏览文件的记录数FS                 设置输入域分隔符,等价于命令行 -F选项NF                 浏览记录的域的个数NR                 已读的记录数OFS                输出域分隔符ORS                输出记录分隔符RS                 控制记录分隔符

awk工作流程

  • 先执行BEGIN,然后读取文件,读入/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0表示所有域,$1表示第一个域,$n表示第n个域,所有开始执行模式所对应的动作的action。接着开始读第二条记录。直到所有的记录都读完,最后执行END操作

awk编程

简单实例

# 打印第一列
#cat /etc/passwd |awk -F ':' '{print $1}' 
# 打印第一列和第7列
#cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'
#统计/etc/passwd的账户人数
awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd
或者
awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd
#统计某个文件夹下的文件占用的字节数
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'
#以M为单位ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}'

条件语句

ls -l |awk 'BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}' [end]size is  8.22339 M

循环语句and数组

awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
    原文作者:YONGSSU的技术站点
    原文地址: https://www.jianshu.com/p/330b67eb3ba0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞