Shell:Day09.笔记
1、awk介绍
全称:Aho Weinberger Kernaighan 三个人的首字母缩写;
所以,我们在Linux中使用,改名为GNU awk;所以,在Linux上实际上叫做gawk;
-o -i -v -E grep egrep fgrep【写什么就匹配什么】
sed 行编辑器
-n p 1、地址定界 3,5,/pat/【e】 2、命令 p a \ i \ w c \ s/pat/str/g|1|2..|&
${var/pat/str} ${var//pat/str}
${test}、${#test}、${test:offset:length}、${test#*word}、${test##*word}、${test%word}、${test%%*word}、${test/pattern/string}、${test//pattern/string}、${test:-word}
awk 报告生成器
通过模式匹配以及自己本身的语言格式,来获取、并输出客户所需要的内容;
【默认情况下,三个工具都不去编辑源文件】
for i in $(cut -d: -f3 /etc/passwd);do
if [ $i -ge 1 -a $i -le 500 ];then
echo grep $i | cut -d: -f1,3
fi
done
awk -F: '{if($3>=1&&$3<=500){print $3}}' /etc/passwd
# awk最后实现这个功能的时候只需要一句话就可以!
awk -F: -v OFS=":" 'BEGIN{printf " username uid \n========================\n"}{if($3>=1&&$3<=500){printf "用户名:%-10s UID:%-10d\n",$1,$3}}END{printf "---------------------------\nend\n"}' /etc/passwd
xxxxx(看图)
awk [option] ... 'program' FILE ...
1、program 必须使用 !单引号!
2、多条program语句使用大括号包含起来,可以并列,可以嵌套
-F 指定分隔符
awk -F[/:] '{print $1,$3}' a.txt
其中 [ ] 内表示多个字符中的任意一个
-v 因为awk是一种语言编译器,能自己定义变量,同时也有内置变量(与环境变量类似)
手动指定变量参数
awk -v a="a/b" '{print a}' a.txt
给a赋值,打印a这个变量
1、a是自定义变量 -v FS=":"
2、在awk中调用调用变量 不用加 $ 符号
awk '{a="a/b";print a}' a.txt
1、print
默认输出(在屏幕上)
在awk中没有保存命令,我们可以关联别的命令来保存awk的结果;
awk '{a="a/b";print a}' a.txt | tee a.bak
2、printf -- 实现格式化输出
printf "%s是%d班学的最好的学生",变量1,变量2
【仅仅只有顺序关系】
格式符
%s 字符串
%d %i 数值
%e %E 科学计算数值
%c ACSii码值
%f 浮点数
%u 无符号整数
%% 逃逸符 只显示 % 自己
修饰符
默认为右对齐
- 代表左对齐
%5.4f
5 所占位数
4 所取小数位
awk '/^UUID/{printf "被挂载文件:%-50s 挂载点:%-10s 文件系统格式:%-10s\n",$1,$2,$3}' /etc/fstab
注意:这里提到了地址定界
sed /PAT1/,/PAT2/
3、变量(内置变量、自定义变量)
内置变量 -- 环境变量(bash)(env、set -C +C)
awk语言所默认支持的变量
FS 定义输入分隔符的变量
OFS 定义输出分隔符的变量
NF 定义行分隔以后的参数个数 ($NF 分隔以后最后的一列变量)
*变量引用的时候,不用加$,$0,$1...$n
awk -v FS=":" '/\/bash$/{print $1,$NF}' /etc/passwd
NR 定义文件的行数,定义多个文件的文件的,行号叠加
FNR 文件只计算自己的行号
awk '{print NR}' /etc/fstab /etc/passwd
awk '{print FNR}' /etc/fstab /etc/passwd
FILENAME 存储文件的名字
awk '{print FILENAME}' /etc/passwd //把文件名打印N次,N文件的行数
awk 'BEGIN{print FILENAME}' /etc/passwd //BEGIN{语句} 只在行循环开始时,执行一次;
ARGC 整个命令的 段数 【注意:不包含 'program' 本身】
ARGV 数组,用来调取命令中,指定的段 ARGV[2] 【注意:数组中也不包含 'program' 】
awk 'BEGIN{print ARGC}' /etc/passwd /etc/fstab /etc/shadow
awk 'BEGIN{print ARGV[3]}' /etc/passwd /etc/fstab /etc/shadow
RS 指定换行符 \n 可以指定新的换行符,不影响本身的换行
ORS 输出的时候指定的换行符,将默认换行符替换为指定字符
awk -v RS=" " '{print}' /etc/passwd
awk -v ORS=" " '{print}' /etc/passwd //可以用来取消换行
自定义变量
-v 变量=值
在后面'program'中去调用自定义变量时,直接使用即可
或者将 “变量=值”语句直接写在'program'亦可;
awk -v a="a/b" '{print a}' a.txt
awk '{a="a/b";print a}' a.txt
Shell:Day09.笔记的更多相关文章
- Learning The Bash Shell读书笔记(整理)
最近搞了一本书 Learning Bash Shell,发现有人已经写了阅读笔记,我就在这边整理一下 来自blog:http://blog.sina.com.cn/n4mine Learning Th ...
- SHELL学习笔记----IF条件判断,判断条件
SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外. if list then do something here ...
- Shell编程笔记
Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理. 修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...
- shell学习笔记
shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...
- 菜鸟教程之学习Shell script笔记(上)
菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- shell学习笔记汇总
1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...
- shell 学习笔记2-shell-test
一.字符串测试表达式 前面一篇介绍:什么是shell,shell变量请参考: shell 学习笔记1-什么是shell,shell变量 1.字符串测试表达式参数 字符串需要用""引 ...
- SHELL学习笔记三
SHELL学习笔记一 SHELL学习笔记二 SHELL学习笔记三 for 命令 读取列表中的复杂值 从变量读取列表 从命令读取值 更改字段分隔符 用通配符读取目录 which 使用多个测试命令 unt ...
随机推荐
- Java实现GBK转码到UTF-8(文件)
所以,虚无的悲叹,寻根问底仍是由于肉身的圈定.肉身蒙蔽了灵魂的眼睛,单是看见要回那无中去,却忘了你原是从那无中来. ...
- postman小工具
进入lmm后,做接口测试使用的是postman,以前稍微接触过,但是不是很会用,这里就自学顺便总结一下,以便以后或者能帮助到别人,如果有什么不同的意见或者有错误,请毫不客气的指出,感谢! 推荐一篇博客 ...
- Java 并发原子操作类(转)
转自:https://www.jianshu.com/p/3632a0f9f083 线程不安全的高并发实现 客户端模拟执行 5000 个任务,线程数量是 200,每个线程执行一次,就将 count 计 ...
- Java多线程详解(转载)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用 ...
- 从原子类和Unsafe来理解Java内存模型,AtomicInteger的incrementAndGet方法源码介绍,valueOffset偏移量的理解
众所周知,i++分为三步: 1. 读取i的值 2. 计算i+1 3. 将计算出i+1赋给i 可以使用锁来保持操作的原子性和变量可见性,用volatile保持值的可见性和操作顺序性: 从一个小例子引发的 ...
- 爬虫如何使用phantomjs无头浏览器解决网页源代码经过渲染的问题(以scrapy框架为例)
一.浏览器的构成 许多开发商提供了商用的浏览器来解释和显示Web文档,而所有这些浏览器几乎都使用相同的体系架构.每一种浏览器(browser)通常由三部分构成:一个控制程序,客户协议和一些解释程序.控 ...
- Cisco 综合配置(三)
要求: 1.PC1 PC2使用DHCP,获取IP ,VLAN为10 和20,网关在Core Switch 2上2.DHCP和web server VLAN为100,网关在Core Switch 1上3 ...
- wr720n v4 折腾笔记(五):终篇-编译安装openwrt附带njit
前言: 由于没有多余的U盘,所以想直接压缩生成一个带njit-client的openwrt固件.其中按照网上的教程走,遇到了一些问题,这里前面的步骤来源于网络.后面给出处理问题的方法. 一.准备工作 ...
- c++ 的vector sort遇到栈错误
在做pat乙级1082 射击比赛时 遇到了sort 段错误. 题目链接:https://www.patest.cn/contests/pat-b-practise/1082 感觉写的没啥毛病 但就是段 ...
- 【SQL SERVER重新认识】数据内部存储结构简单探索
数据库经常需要打交道,但是从来没想过数据库内部是如何存储数据. 今天探索一下数据库内部如何存储数据,从下面几个方面探索 数据库内部如何存储数据 索引数据如何存储 操作数据对存储影响 总结 数据库内部如 ...