Linux shell awk中print及变量使用
Linux处理文本工具
grep: 过滤文本内容
sed: 编辑文本内容
awk: 显示文本
awk: Aho Peter Weinberger Kernighan
报告生成器,以特定的条件查找文本内容,在以特定的格式显示
awk命令的格式:
# awk [option] 'script' file1 file2...
# awk [option] 'PATTERM{action}' file1 file2...
PATTERN:
用文本字符与正则表达式元字符描述的条件,可以省略不写
action:
print
printf 指定输出项的格式:格式必须写
option选项:
-F 指定文本分割符
awk处理文本机制:
awk将符合PATTERN的文本逐渐取出,并按照指定的分割符(默认为空白,通过—F选项可以指定分割符)进行分割,然后将分割后的每段按照特定的格式输出
awk的输出:
一 print
print的使用格式:
print item1,item,...
注意:
1,各项目间使用逗号分隔开,而输出时以空白字符串为分隔
2,输出的item可以为字符串,数值,当前的记录的字段($1),变量或者awk的表达式,数值会先转换字符串,然后输出
3,print命令后面的item可以省略,此时其功能相当于print($0代表未分割的整行文本内容),因此,如果想输出空行,则需要使用print "";
以空白分割,显示文本的第一段及第二段内容
[root@wei awk]# awk '{print $1,$3}' print.txt
i wei
i zhang
[root@wei awk]# awk '{print "hello",$3}' print.txt
hello wei
hello zhang
显示passwd的用户名称
[root@wei awk]# awk -F: '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
显示设备的挂载情况
[root@wei awk]# df -hT | sed '1d' | awk '{print "设备名称:",$1,"挂载点:",$7,"总容量:",$3}'
设备名称: /dev/mapper/centos-root 挂载点: / 总容量: 17G
设备名称: devtmpfs 挂载点: /dev 总容量: 476M
设备名称: tmpfs 挂载点: /dev/shm 总容量: 488M
awk变量
1 awk内置变量之记录变量
FS:指定读取文本时,所使用的行分隔符,默认为空白字符,相当于awk的—F选项
OFS:指定输出的分隔符,默认为空白字符;
[root@wei awk]# head -n 1 /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash
FS模式
[root@wei awk]# head -n 1 /etc/passwd | awk 'BEGIN{FS=":"}{print $1,$7}'
root /bin/bash
OFS模式
[root@wei awk]# head -n 1 /etc/passwd | awk -F: 'BEGIN{OFS="---"}{print $1,$7}'
root---/bin/bash
模式混合
[root@wei awk]# head -n 1 /etc/passwd | awk 'BEGIN{FS=":";OFS="---"}{print $1,$7}'
root---/bin/bash
2 awk内置变量之数据变量
NR:记录awk所处理的文本行数,如果有多个文件,所有的文件统一进行计数
第 1 行内容: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
第 2 行内容: ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
第 3 行内容: \S
第 4 行内容: Kernel \r on an \m
第 5 行内容:
注意:
print在显示变量值时,不要使用$
FNR:记录awk所处理的文本行数,如果有多个文件,所有的文件分别进行计数
[root@wei awk]# awk '{print "第",FNR,"行内容:",$0}' /etc/hosts /etc/issue
第 1 行内容: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
第 2 行内容: ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
第 1 行内容: \S
第 2 行内容: Kernel \r on an \m
第 3 行内容:
NF:记录awk正在处理的当前行被分隔成几个字段
[root@wei awk]# cat print.txt
i am wei
i am zhang
[root@wei awk]# awk '{print NF}' print.txt
3
3
[root@wei awk]# awk '{print $NF}' print.txt
wei
zhang
3 用户自定义的变量
awk允许用户自定义变量,变量名称不能以数字开头,且区分大小写
示例:
方法一:使用-v选项
[root@wei awk]# head -n 3 /etc/passwd | awk -v test="hello" -F: '{print test,$1}'
hello root
hello bin
hello daemon
方法二:在BEGIN{}模式自定义变量
[root@wei awk]# head -n 3 /etc/passwd | awk -F: 'BEGIN{test="hello"}{print test,$1}'
hello root
hello bin
hello daemon
Linux shell awk中print及变量使用的更多相关文章
- Linux shell awk中printf使用
printf 是 awk 的重要格式化输出命令 printf格式化输出内容 格式: printf format,item1,item2... 要点: 1,printf输出时要指定格式f ...
- Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||
https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...
- 学习Linux shell脚本中连接字符串的方法
这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...
- Linux shell脚本中shift
Linux shell脚本中shift的用法说明 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本). ...
- Linux shell命令中expr
在Linux shell命令中expr虽然不是很起眼,但是它的作用是非常大的!到目前为止,我个人看来最大的作用就是两个——四则运算和字符串的操作. 先说四则运算,在Shell中四则运算不能简简单单的加 ...
- Linux shell脚本中shift的用法说明【转】
本文转载自:http://blog.csdn.net/zhu_xun/article/details/24796235 Linux shell脚本中shift的用法说明 shift命令用于对参数的移动 ...
- shell脚本中特定符合变量的含义
shell脚本中特定符合变量的含义: $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个 $$ 脚本运行的当前进程PID号 ...
- linux shell脚本中的延时
linux shell脚本中的延时 还是使用 sleep 或usleep函数. 详细如下: .sleep : 默认为秒. sleep 1s 表示延迟一秒 sleep 1m 表示延迟一分钟 ...
- Linux shell 脚本中变量的数学计算【转】
本文转载自:http://blog.csdn.net/qinghezhen/article/details/9194287 首先从一个例子说起: x=1+1 echo $x 你是不是期待着输出2啊?让 ...
随机推荐
- JAVA List中剔除空元素(null)的方法
方法一.list.removeAll(Collections.singleton(null)); 方法二.List nullList = new ArrayList(); ...
- HttpRequestMessage扩展方法
public static class HttpRequestMessageExtensions { /// <summary> /// Gets the <see cref=&qu ...
- web框架--tornado之cookie与session初识
cookie的本质其实就是在浏览器端保存的键值对, 每当浏览器端发送一次请求, 都会将这些键值对附加在请求中并发送给服务器端. 一.目录结构 二.main_pro.py #!/usr/bin/env ...
- Excel-逻辑函数
1.Excel计算的两种方式 Excel计算的两种方式: 1.公式:一些运算符和数值组成的数学表达式 2.函数:是Excel内部设置好的运算模块 2.EXcel的运算符 3.运算顺序 4.excel公 ...
- impala入门
一.概述 Impala 是参照google 的新三篇论文Dremel(大批量数据查询工具)的开源实现,功能类似shark(依赖于hive)和Drill(apache),impala 是clouder ...
- 学习vue_01
目录 vue 框架: 框架介绍 基础格式 插值表达式: 文本指令: 事件指令: 属性指令: 小结: js 补充(面向对象): vue 框架: --构建虚拟的DOM结构,(内存内改变对象)- 操作数据的 ...
- Windows下MySQL安装流程,8.0以上版本ROOT密码报错及修改
官网下载MySQL安装后,解压,添加环境变量,以管理员方式运行cmd,运行以下命令 mysqld --initialize --console mysqld -install net start my ...
- MySQL基本数据类型和约束方式
常用数据类型 1.mysql中的基本数据类型 整型.浮点型.字符类型.日期类型.枚举和集合. 2.常用的约束条件 PRIMARY KEY.UNIPUE KEY.NOT NULL.FOREIGN KEY ...
- Java连载13-整数型字面值的强制转换
一.注意点 1.大容量不能直接赋值给小容量:大容量转化为小容量需要进行,强制类型转换,强制类型转换需要加上“强制类型转换符”,加上强制类型转换符之后编译通过了但是精度会有有可能损失.所以强制类型转换要 ...
- SDK-基于Windows环境搭建
SDK安装配置 前言:相信很多小伙伴还不会搭SDK,近日一位前同事询问我SDK怎么搭建了?不妨看看吧,小编是基于appium. 1.下载SDK:http://tools.android-studio. ...