awk介绍

报告生成器,格式化文本输出

处理机制类似sed命令,自带循环处理    读入一行处理一行然后自动读取下一行再进行处理

sed命令换行的标识是固定的,只能是回车换行.    awk里面的换行符是可以自定义的.

awk自动把读入的行按照指定的切割符号切割成若干个字段   默认的切割符号是空白符号(包括连续的空白符号,tab键,回车换行符)

基础语法

awk  [options]   'program'  var=value    file

awk  [options]  -f programfile  var=value   file

awk [options]   'BEGIN{action;..} pattern{ action;....} END {action;....}'   file

通常由:  BEGIN语句块    能够使用模式匹配的通用语句块     END语句块    三部分组成

第一步:  先执行 BGEIN 语句块  经常用于打印表头

第二步:  从文件或者标准输入读取一行,然后执行pattern语句 它会逐行扫描文件,直到文件全部读取完毕

第三步: 处理完文件或者输入流的最后一行后,最后执行的语句块  经常用于进行数据汇总

pattern语句如果没有提供 默认执行 {print } 就是打印每一个读取到的行

选项 options

-F   指明输入时用到的字段分隔符号

-v   var=value  自定义变量

awk内置变量

FS        表示把行按照这个变量进行切割成列
   OFS      表示按这个字符把列进行拼装组合输出
   RS        表示按照这个变量作为行的分隔符
   ORS      表示以这个符号连接每行输出的结果
   NF         表示字段的数量大小
   NR         表示行号
   FNR       多个文件的时候各自的文件行号
   FILENAME       表示当前的文件名称

FS:输入字段分隔符,默认为空白字符

awk -v FS=':'  '{print $1,FS,$3}’ /etc/passwd

awk  –F:   '{print $1,$3,$7}’ /etc/passwd

OFS:输出字段分隔符,默认为空白字符

awk  -v FS=‘:’  -v OFS=‘:’ '{print $1,$3,$7}’ /etc/passwd

RS:输入记录分隔符,指定输入时的换行符     默认是换行符

awk -v RS=' ' ‘{print }’ /etc/passwd

ORS:输出记录分隔符,输出时用指定符号代替换行符    默认是换行符

awk -v RS=' ' -v ORS='###'‘{print }’ /etc/passwd

NF:字段数量

awk  -F: ‘{print NF}’ /etc/fstab

awk  -F:  '{print NF,"----"$NF"----"$(NF-1)}'       /etc/passwd

引用内置变量不用$

awk  -F:  '{print $(NF-1)}'  /etc/passwd

NR:记录号

awk '{print NR}'  /etc/fstab ; awk END'{print NR}'  /etc/fstab

FNR:各文件分别计数自己的记录号

awk '{print FNR}'  /etc/fstab /etc/inittab

FILENAME:当前文件名

awk '{print FILENAME}’  /etc/fstab

ARGC:命令行参数的个数

awk '{print ARGC}’  /etc/fstab /etc/inittab

awk ‘BEGIN {print ARGC}’  /etc/fstab /etc/inittab

ARGV:数组,保存的是命令行所给定的各参数

awk ‘BEGIN {print ARGV[0]}’  /etc/fstab /etc/inittab         ARGV[0]代表的awk自己本身  ARGV[1] 代表/etc/fstab  ARGV[2]代表/etc/inittab

awk ‘BEGIN {print ARGV[1]}’  /etc/fstab /etc/inittab

awk自定义变量

自定义变量(区分字符大小写)

(1) -v var=value

(2) 在program中直接定义

(3) 变量最好先定义赋值然后再去使用

printf格式化输出

1.输出信息默认不会换行,需要显示指定换行控制符 \n

格式符:

1. %c            显示字符的ASCII码

2. %d,%i       显示十进制数字

3.  %s           显示字符串

4.  %%         显示%自身

5. %f            显示浮点数

awk -F: '{printf "%s:%s\n",$1,$3}'     /etc/passwd

awk -F: 'BEGIN{print "username      uid"}{printf"%s   %s\n", $1,$3}'    /etc/passwd

awk实例

 从文件中读取program
cat awkscript
{print script,$,$}
[root@centos7 ~]# awk -F: -f awkscript script="awkkk" /etc/passwd
awkkk root x
awkkk bin x
awkkk daemon x
[root@centos7 ~]# awk -F: '{printf"Username: %s\n",$1}' /etc/passwd
Username: root
Username: bin
Username: daemon
输出json字典
[root@centos7 ~]# awk -F: '{printf "Username:%s,UID:%d\n",$1,$3}' /etc/passwd
Username:root,UID:
Username:bin,UID:
[root@centos7 ~]# awk -F: '$0 ~ /root/{print $1}' /etc/passwd
root
operator
rooter
[root@centos7 ~]# awk -F: '$0 ~ /^root/{print $1}' /etc/passwd
root
rooter
awk '$0 !~ /root/' /etc/passwd
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
[root@centos7 ~]# awk -F: '$3==0' /etc/passwd
root:x:::root:/root:/bin/bash
 [root@centos7 ~]# awk '{print 2^10}'
e [root@centos7 ~]# awk -F: '{print $1":"$3}' /etc/passwd
root:
bin:
daemon:
[root@centos7 ~]# df | awk '{print $1,$3}'
Filesystem Used
/dev/sda2
devtmpfs
tmpfs
[root@centos7 ~]# awk -v FS=: '{print $1,$3}' /etc/passwd
root
[root@centos7 ~]# awk -v FS=: '{print $1FS$3}' /etc/passwd
root:
shell变量传递给awk
[root@centos7 ~]# fs=":";awk -v FS=$fs '{print $1FS$3}' /etc/passwd
root:
bin: [root@centos7 ~]# awk -v ORS="****" '{print $1}' a2
********o********o********You have new mail in /var/spool/mail/root
[root@centos7 ~]# awk '{print $1}' a2 o o
 [root@centos7 ~]# df | grep '^/dev/sd'|awk '{print $1,$5}'
/dev/sda2 %
/dev/sda3 %
/dev/sda1 %
[root@centos7 ~]# df | grep '^/dev/sd'|awk -v FS=% '{print $1}'
/dev/sda2
/dev/sda3
/dev/sda1
[root@centos7 ~]# df | grep '^/dev/sd'|awk -v FS=% '{print $1}'|awk '{print $1,$5}'
/dev/sda2
/dev/sda3
/dev/sda1
[root@centos7 ~]# awk -F: '{print NF,$NF,$(NF-1)}' /etc/passwd
/bin/bash /root
/sbin/nologin /bin
/sbin/nologin /sbin
/sbin/nologin /var/adm
/sbin/nologin /var/spool/lpd

shell编程awk基础介绍的更多相关文章

  1. Linux学习笔记(17) Shell编程之基础

    1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...

  2. Shell编程菜鸟基础入门笔记

    Shell编程基础入门     1.shell格式:例 shell脚本开发习惯 1.指定解释器 #!/bin/bash 2.脚本开头加版权等信息如:#DATE:时间,#author(作者)#mail: ...

  3. Shell编程入门基础上

    前言 为什么学 Shell Shell 脚本语言是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, Linux/UNIX 系统的底层及基础应用软件的核心大都涉及 Shell 脚本的内 ...

  4. shell编程awk进阶

    awk操作符 算术操作符:  x+y, x-y, x*y, x/y, x^y, x%y      -x: 转换为负数      +x: 转换为数值 字符串操作符:没有符号的操作符,字符串连接 赋值操作 ...

  5. Shell编程——bash基础知识

    # Bash中自动补全时忽略大小写 # 编辑~/.inputrc(没有的话,就新建一个),在最后加一行: set completion-ignore-case on # 若要用方向键Up,Down来搜 ...

  6. 第一部分shell编程1基础知识

    ls etc/init.d/ shell脚本的路径 ls /usr/local/apache2/ ls /usr/local/apache2/bin/apachectl 1. shell特性命令历史 ...

  7. Linux Shell编程 awk命令

    概述 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是l ...

  8. 【Android高级】NDK/JNI编程技术基础介绍

    作为一个Andoird的Java程序猿,会受到Java语言的局限.由于作为一面门向对象的语言不能像C/C++那样轻易调用与硬件有关的操作.因此JNI就搭建了这样一个桥梁,使Java和C/C++语言之间 ...

  9. shell编程之基础

    1.初探shell #!/bin/bash echo -e 'hello \nworld' 执行结果 echo 是打印输出字符,-e选项是开启转义功能 注意: 在windows下编写的shell脚本直 ...

随机推荐

  1. 【algorithm】 二分查找算法

    二分查找算法:<维基百科> 在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)[1].对数搜索(英语:logari ...

  2. [Linux] 如何禁止使用口令只允许使用密钥建立 SSH 连接

    1. 创建 SSH KEY 使用 ssh-keygen 生成一个密钥对,并且将公钥注册到服务器的 $HOME/.ssh/authorized_keys 文件. 2. 确保启用 SSH 公钥认证功能 查 ...

  3. 1.浅谈CLR

    1.什么是CLR CLR(Common Language Runtime)公共语言远行时,是一个可由多种编程语言使用的“远行时”.CLR的核心功能(比如内存管理.程序集加载.安全性.异常处理和线程同步 ...

  4. 实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置

    前几天看到了有人在android5.0上实现了如下图一样的效果,我自己就去搜了下.参考了国外一篇文章和国内的一篇文章,最终实现了想要的效果.具体参考的网址我已经贴到文章末尾,大家可以去英文的那个网站看 ...

  5. Installation Guide Ubuntu 16.04

    Beside the installation guide on the main page, here is a guide to install GenieACS off a freshly in ...

  6. Tomcat服务器使用和debug

    1 在写程序的过程中,遇到了tomcat服务器不能重启的情况,要排查出这个错误并解决它. tomcat就像一棵树,我不能对书上的每片叶子的纹理都熟悉,我只能看到树的轮廓.好像之前出现过这个问题,在se ...

  7. Spark RDD Action 简单用例(二)

    foreach(f: T => Unit) 对RDD的所有元素应用f函数进行处理,f无返回值./** * Applies a function f to all elements of this ...

  8. scala 可变集合与内存清理的关系

    留坑待填 使用scala.collection.mutable._期间,发现了当程序运行内存开销较多时,使用系统工具进行内存清理,然后程序报出了变量找不到.内存无法访问.数组访问越界,堆栈溢出等多种错 ...

  9. ubuntu-18.04 root登录图形界面失败问题解决方案

    一.设置root密码 二.进入/etc/pam.d目录 主要修改两个文件(圈了红色框框),记得命令行下切换root账户(sudo -i)进行vim修改,刚安装的ubuntu没有vim支持,请根据提示进 ...

  10. apache中端口与目录的关系

    apache中,如果设置了监听了端口而没有配置对应的虚拟目录,则访问时会指向<Directory >节所指向的目录.