1-27 awk 基本使用
Posted 小甘丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1-27 awk 基本使用相关的知识,希望对你有一定的参考价值。
大纲:
色彩:
awk基本使用
#####################################################
一、色彩:shell中,设置输出文本色彩(前景色,背景色)
在Shell中,可以给输出的字体设置颜色(前景色、背景色)
颜色 | 黑色 | 红色 | 绿色 | 黄色 | 蓝色 | 紫色 | 蓝色 | 白色 |
字体编码 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |
背景编码 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
1、字背景色、字体颜色、字体效果可单独使用也可组合使用前后顺序没有关系,用英文的 ";" 隔开
2、字背景色、字体颜色、字体效果后面有一个m
3、字符串前后可以没有空格,如果有的话,输出也是同样有空格
实例:
echo -e "\\033[30;47m 黑色字 \\033[0m"
echo -e "\\033[31m 红色字 \\033[0m"
echo -e "\\033[32m 绿色字 \\033[0m"
echo -e "\\033[33m 黄色字 \\033[0m"
echo -e "\\033[34m 蓝色字 \\033[0m"
echo -e "\\033[35m 紫色字 \\033[0m"
echo -e "\\033[36m 蓝色字 \\033[0m"
echo -e "\\033[37m 白色字 \\033[0m"
二、awk基本使用
grep、sed、awk 文本处理工具,各有优缺
grep:主要用于文本过滤,相对于其他工具效率高
sed 流编辑器 默认只处理模式空间中的数据,以行为单位进行操作。
awk 报告生成器,将数据格式化后,显示出来。以列为单位进行操作。
awk命令由来:根据其三位作者而得名
Alfrd Aho 、 Peter Weinberger 、Brian Kernighan
可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。最简单地说,AWK是一种用于处理文本的编程语言工具。
工程流程:
awk将文本逐行的读入内存中,不直接对文本进行处理,分片后,(默认空格符号为分隔符),输出结果,在内部引用位置变量,我们可以使用位置变量指定要输出的片段。
Usage: awk [options] \'{print $1}\' file ...
#支持位置参数
举例
输出第一个片段
awk \'{print $1}\' test.txt
awk的输出 print
1、当要输出多个变量时,print命令使用 {默认 ,“逗号”}分割,输出时,默认已空格分割
2、输出的item可以为字符串或数值、当前记录的字段(如$1)、变量或awk的表达式;数值会先转换为字符串,而后再输出;
3、print命令后面的item可以省略,此时其功能相当于print $0, 因此,如果想输出空白行,则需要使用print "";
实例:输出用户登录名和登录shell(需指定输入分隔符为:)
awk -v FS=: \'{print $1,$7}\' /etc/passwd
awk -F : \'{print $1,$7}\' /etc/passwd
awk命令常用变量:
FS # 字段分隔符
OFS # 输出字段分隔符
NF # 当前记录,分段数($NF 即本行最末尾一个字段)
RS # 记录分隔符,默认是换行符
NR # awk处理的记录数
FNR # 当前处理行在当前文件中总共被处理的行数
BEGIN
END
实例:修改输出分隔符
字段分隔符的指定方式
awk -F : \'{print $1}\' /etc/passwd
#指定以”:“为分隔符
awk -v FS=: \'{print $NF}\' /etc/passwd
#指定以”:“为分隔符 -v表示声明一个变量
wk \'BEGIN{FS=":"}{print $1,$3}\' /etc/passwd
#在命令执行之前为变量赋值
awk -v OFS=: \'{print $1,$2}\' a.txt
#OFS 指定输出字段分隔符
用户自定义变量
gawk允许用户自定义自己的变量以便在程序代码中使用,变量名命名规则与大多数编程语言相同,只能使用字母、数字和下划线,且不能以数字开头。gawk变量名称区分字符大小写。
awk \'BEGIN{var="xuegod test";print var}\'
#给变量赋值,并输出变量的值
awk -v var="xuegod test" \'BEGIN{print var}\'
#给变量赋值并输出变量的值
实战:awk过滤数据(使用脚本实现,计算当前内存使用率)
[root@xiaogan122 ~]# vim mem.sh
#file ---> mem.sh
#!/bin/bash
limit=50
Mem=$(free -m | grep Mem | awk \'{print $3}\')
total=$(free -m | grep Mem | awk \'{print $2}\')
tmp=$(( 100 * $Mem / $total ))
echo "The Used Memery is $tmp%."
if [ $tmp -gt $limit ]
then
echo " Be Carefull! "
fi
[root@xiaogan122 ~]# sh mem.sh
以上是关于1-27 awk 基本使用的主要内容,如果未能解决你的问题,请参考以下文章