shell编程awk基础介绍
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基础介绍的更多相关文章
- Linux学习笔记(17) Shell编程之基础
1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...
- Shell编程菜鸟基础入门笔记
Shell编程基础入门 1.shell格式:例 shell脚本开发习惯 1.指定解释器 #!/bin/bash 2.脚本开头加版权等信息如:#DATE:时间,#author(作者)#mail: ...
- Shell编程入门基础上
前言 为什么学 Shell Shell 脚本语言是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, Linux/UNIX 系统的底层及基础应用软件的核心大都涉及 Shell 脚本的内 ...
- shell编程awk进阶
awk操作符 算术操作符: x+y, x-y, x*y, x/y, x^y, x%y -x: 转换为负数 +x: 转换为数值 字符串操作符:没有符号的操作符,字符串连接 赋值操作 ...
- Shell编程——bash基础知识
# Bash中自动补全时忽略大小写 # 编辑~/.inputrc(没有的话,就新建一个),在最后加一行: set completion-ignore-case on # 若要用方向键Up,Down来搜 ...
- 第一部分shell编程1基础知识
ls etc/init.d/ shell脚本的路径 ls /usr/local/apache2/ ls /usr/local/apache2/bin/apachectl 1. shell特性命令历史 ...
- Linux Shell编程 awk命令
概述 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是l ...
- 【Android高级】NDK/JNI编程技术基础介绍
作为一个Andoird的Java程序猿,会受到Java语言的局限.由于作为一面门向对象的语言不能像C/C++那样轻易调用与硬件有关的操作.因此JNI就搭建了这样一个桥梁,使Java和C/C++语言之间 ...
- shell编程之基础
1.初探shell #!/bin/bash echo -e 'hello \nworld' 执行结果 echo 是打印输出字符,-e选项是开启转义功能 注意: 在windows下编写的shell脚本直 ...
随机推荐
- 斯坦福2011秋季 iPad and iPhone Application Development 资源
1. MVC and Introduction to Objective-C (September 27, 2011) - HD 2. My First iOS App (September 29, ...
- 《Python3网络爬虫开发实战》
推荐:★ ★ ★ ★ ★ 第1章 开发环境配置 第2章 网页基础知识 第3章 网络爬虫基础 第4章 基本库的使用 第5章 解析库的使用 第6章 数据存储 第7章 Ajax数据爬取 第8章 动态渲染页面 ...
- Linux input子系统编程、分析与模板
输入设备都有共性:中断驱动+字符IO,基于分层的思想,Linux内核将这些设备的公有的部分提取出来,基于cdev提供接口,设计了输入子系统,所有使用输入子系统构建的设备都使用主设备号13,同时输入子系 ...
- 编译你的第一个Java虚拟机--Centos 7 编译openJdk1.7源码
一.前言 最近在看<深入java虚拟机>,看完后,打算自己实际编译一个jvm出来看看,实践一下. 书上提到了Oracle JDK和OpenJdk的关系,Oracle Jdk7 和OpenJ ...
- centos7上设置中文字符集
author: headsen chen date: 2019-03-14 09:00:31 Linux系统会默认使用英文字符集,不会安装中文字符集等其他字符. 公司内部文件服务器等需要中文 ...
- MacOS install configure php-fpm
php-fpm 是预装在mac os上的,你只需要配置就好了.这个服务监听9000端口. 1. 为配置文件准备一些目录 mkdir -p /usr/share/php/var/run mkdir -p ...
- 2. Mysql数据库的入门知识
2. Mysql数据库的入门知识 (1)打开Windows系统提供的服务查看相应的服务. (2)在Windows任务管理器的进程中查看 (3)使用命令行管理windows的Mysql数据库服务. Ne ...
- python3之深浅拷贝
深浅copy 1,先看赋值运算. l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barry', ...
- 【vue】如何在 Vue-cli 创建的项目中引入 iView
根据vue项目的搭建教程,以下记录如何在Vue-cli创建的项目中引入iView. 1)iView的安装,在项目下使用 npm 安装iView cnpm install iview --save ...
- asp.net Ajax调用Aspx后台方法
Ajax调用的前提(以aspx文件为例:) 1.首先需要在aspx文件后台中引用using System.Web.Services; 2.需要调用的方法必须是公共的(public).静态的(stati ...