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实例

 1 从文件中读取program
 2 cat awkscript
 3   {print script,$1,$2}
 4 [[email protected] ~]# awk -F: -f awkscript script="awkkk" /etc/passwd
 5 awkkk root x
 6 awkkk bin x
 7 awkkk daemon x
 8 [[email protected] ~]# awk -F: ‘{printf"Username: %s\n",$1}‘ /etc/passwd
 9 Username: root
10 Username: bin
11 Username: daemon
12 输出json字典
13 [[email protected] ~]# awk -F: ‘{printf "Username:%s,UID:%d\n",$1,$3}‘ /etc/passwd
14 Username:root,UID:0
15 Username:bin,UID:1
16 [[email protected] ~]# awk -F: ‘$0 ~ /root/{print $1}‘ /etc/passwd
17 root
18 operator
19 rooter
20 [[email protected] ~]# awk -F: ‘$0 ~ /^root/{print $1}‘ /etc/passwd
21 root
22 rooter
23 awk ‘$0 !~ /root/‘ /etc/passwd
24 bin:x:1:1:bin:/bin:/sbin/nologin
25 daemon:x:2:2:daemon:/sbin:/sbin/nologin
26 [[email protected] ~]# awk -F: ‘$3==0‘ /etc/passwd
27 root:x:0:0:root:/root:/bin/bash

 1 [[email protected] ~]# awk ‘{print 2^10}‘
 2 e
 3 1024
 4 [[email protected] ~]# awk -F: ‘{print $1":"$3}‘ /etc/passwd
 5 root:0
 6 bin:1
 7 daemon:2
 8 [[email protected] ~]# df | awk ‘{print $1,$3}‘
 9 Filesystem Used
10 /dev/sda2 4347496
11 devtmpfs 0
12 tmpfs 0
13 [[email protected] ~]# awk -v FS=: ‘{print $1,$3}‘ /etc/passwd
14 root 0
15 [[email protected] ~]# awk -v FS=: ‘{print $1FS$3}‘ /etc/passwd
16 root:0
17 shell变量传递给awk
18 [[email protected] ~]# fs=":";awk -v FS=$fs ‘{print $1FS$3}‘ /etc/passwd
19 root:0
20 bin:1
21
22 [[email protected] ~]# awk -v ORS="****" ‘{print $1}‘ a2
23 1****3****o****2****o****4****You have new mail in /var/spool/mail/root
24 [[email protected] ~]# awk ‘{print $1}‘ a2
25 1
26 3
27 o
28 2
29 o
30 4

 1 [[email protected] ~]# df | grep ‘^/dev/sd‘|awk ‘{print $1,$5}‘
 2 /dev/sda2 9%
 3 /dev/sda3 1%
 4 /dev/sda1 20%
 5 [[email protected] ~]# df | grep ‘^/dev/sd‘|awk -v FS=% ‘{print $1}‘
 6 /dev/sda2       52403200 4347456  48055744   9
 7 /dev/sda3       31441920   83004  31358916   1
 8 /dev/sda1        1038336  198256    840080  20
 9 [[email protected] ~]# df | grep ‘^/dev/sd‘|awk -v FS=% ‘{print $1}‘|awk ‘{print $1,$5}‘
10 /dev/sda2 9
11 /dev/sda3 1
12 /dev/sda1 20
13 [[email protected] ~]# awk -F: ‘{print NF,$NF,$(NF-1)}‘ /etc/passwd
14 7 /bin/bash /root
15 7 /sbin/nologin /bin
16 7 /sbin/nologin /sbin
17 7 /sbin/nologin /var/adm
18 7 /sbin/nologin /var/spool/lpd

原文地址:https://www.cnblogs.com/yxh168/p/9042145.html

时间: 2024-09-29 22:08:25

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

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

1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find.cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了. (2) 基础正则表达式 元字符 作用 * 前一个字符匹配0次或任意多次 . 匹配除了换行符外任意一个字符 ^ 匹配行首,如:^hello会匹配以hello开头的行 $ 匹配行尾,如:hello$会匹配以hello结尾的

Shell编程(基础)

背景什么是shell编程 高大上的解释,往往让人摸不住头脑.一句话概括就是:shell编程就是对一堆Linux命令的逻辑化处理.为什么要会shell编程 举个简单的例子,我们做javaweb开发的,在以前,如果要在本地将程序打包,然后部署到远程服务器(抛开现在的ci, 原始的方法), 我们以前的做法通常会经历如下几个步骤: 拉取最新代码(git pull) 编译打包 上传并部署到远程服务器 每次打包都要经历这一个阶段,效率低又烦躁.而此时,我们可以编写一个shell脚本,然后每次只需要运行一下这

编程语言和shell编程的基础内容以及grep、egrep命令及相应的正则表达式和用法

bash的特性之多命令执行的逻辑关系: 1.命令替换(命令之间无明确的逻辑依赖关系) COMMAND1 $(COMMAND2) 2.管道(命令之间无明确的逻辑依赖关系) COMMAND1 | COMMAND2 | COMMAND3 前面的命令无论执行成功与失败后面命令继续执行:管道命令的前一个命令应该有标准和输出否则用":"隔开 例如:useradd sola :echo 456 | passwd --stdin sola 3.顺序执行结构 COMMAND1:COMMAND2:COMM

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

ls etc/init.d/ shell脚本的路径 ls /usr/local/apache2/ ls /usr/local/apache2/bin/apachectl 1. shell特性命令历史 history !! !$ !n !字符Tab 键可以补全文件路径或者命令alias a=“b” unalias a通配符 *匹配零个或多个字符 ?匹配一个字符输入输出重定向 >, >>, < 反向重定向, 2>, 2>> 错误重定向管道符 |作业控制 ctrl+z,

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

作为一个Andoird的Java程序猿,会受到Java语言的局限.由于作为一面门向对象的语言不能像C/C++那样轻易调用与硬件有关的操作.因此JNI就搭建了这样一个桥梁,使Java和C/C++语言之间能够互相调用. 作为一个Javaproject师对C/C++的语言不是非常熟悉,但仅仅需熟悉他们之间调用的原理和方法,关于C/C++的编程就交给C语言project师去吧. 在这篇文章中主要介绍NDK/JIN搭建和基本用法. 一. 环境的搭建 二. 主要的使用 步骤: (1)新建Androidpro

shell编程之一基础

大纲 一.编程语言分类 二.shell分类 三.变量相关概念 四.bash变量类型 五.逻辑运算 六.算术运算 七.bash条件测试类型及测试方法 八.命令的执行结果与执行状态返回值区别 一.编程语言分类 距离人的远近分类:机器语言.汇编语言.高级语言 执行时是否需要预先转换:编译型语言.解释性语言 编程风格分类:面向对象.面向过程 变量使用时是否需要预先声明:强类型语言.弱类型语言 二.shell分类及bash概念 GUI:Gnome.KDE.Xfce CLI:sh.bash.csh.ksh.

Shell编程——bash基础知识

创建脚本:vim test.sh    脚本内容:#! /bin/bash  #"#!"是一个约定标记,告诉系统用哪种shell来执行              echo "Hello world!"使脚本具有执行权限:chmod  +x ./test.sh执行脚本:./test.sh     #注意,一定要写成./test.sh,而不是test.sh.若直接写成test.sh,linux会去PATH里面找寻有没有test.sh. [shell注释]:以“#”开头的

shell编程awk进阶

awk操作符 算术操作符:  x+y, x-y, x*y, x/y, x^y, x%y      -x: 转换为负数      +x: 转换为数值 字符串操作符:没有符号的操作符,字符串连接 赋值操作符: =, +=, -=, *=, /=, %=, ^=  ++, -- 比较操作符: ==, !=, >, >=, <, <= awk  -F:   '!($3==0) {print $1}'   /etc/passwd 模式匹配符:  ~ 左边是否和右边匹配包含       !~

Linux Shell编程 awk命令

概述 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用.awk有很多内建的功能,比如数组.函数等,这是它和C语言的相同之处,灵活性是awk最大的优势. 命令的基本格式如下: [[email protected] ~]# awk '条件1 {执行语句 1} 条件 2 {执行语