AWK文本工具
两种版本1.nawk 2.gawk
gawk 模式扫描和处理语言
选项:
-F 指明输入时用到的字段分隔符
-v var=value:自定义变量
基本格式: awk [options] ’program’ file….
program:pattern{action statrments;……..}
分隔符,域记录:
1. awk 执行时,由分隔符分隔的字段标记$1,$2….$n 称为域标识。
2. $0为所有域。或者说整行
3. 文件的每一行称为记录
print 格式:print item1,item2,………..
要点:
1. 逗号分隔
2. 输出的各item可以是字符串,也可以是数值
3. 如省略item,相当于print $0
例子:
awk ‘{print “hello,awk”}’ 在屏幕输出hello,awk
awk -F: ‘{print}’ /etc/passwd 在屏幕上打印/etc/passwd文件的内容
awk -F: ‘{print “zm”}’ /etc/passwd 有多少行就打印多少行zm
awk -F: ‘{print $1}’ /etc/passwd 打印/etc/passwd的以:为分隔符的第一个字段
awk -F: ‘{print $0}’ /etc/passwd 打印所有字段
awk -F: ‘{print $1”\t” $3}’ /etc/passwd 打印文件的第一个和第三个字段
awk 变量:内置和自定义变量
FS:输入字段分隔符,默认为空白符
awk -v FS=”:” ‘{print $1,$F,$3}’ /etc/passwd 打印第一个字符和第三个字符用:分
awk -F: ‘{print $1,$3,$7}’ /etc/passw 打印1.3.7个字符
OFS:输出字段分隔符,默认为空白字符
awk -v FS=”:” -v OFS=”:” ‘{print $1,$3,$7}’ /etc/passwd 输出以:分隔打印1.3.7
RS:输出记录分隔符,指定输入时的换行符
awk -v RS=” ‘{print}’ /etc/passwd
ORS:输出记录分隔符,输出时用指定符号代替换行符
awk -v RS=” -v ORS=’###’ ‘{print}’ /etc/passwd
NF:字段数量
awk -F: ‘{print NF}’ /etc/fsta
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/passwd 分别打印各个文件行数
FILENAME:当前文件名
awk “{print FILENAME}” /etc/fstab 打印出当前文件名
ARGC:命令行参数的个数
awk ‘{peint ARGC}’ /etc/fstab /etc/inittab 打印命令行参数个数,不加GEGIN不打印
awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab 打印命令行参数个数,awk也算
ARGV:数组,保存的是命令行所给定的各参数
awk ‘BEGIN{print ARGV[0]}’ /etc/fstab /etc/inittab 结果打印处awk
awk ‘BEGIN{print ARGV[1]}’ /etc/fstab /etc/inittab 打印出/etc/fstab
awk变量:自定义变量(区分字符大小写)
-v var=value
在program中直接定义
示例:
awk -v test=’hello gawk’ ‘{print test}’ /etc/fstab 先赋值后打印
awk -v test=’hello gawk’ ‘BEGIN{print test}’ /etc/fstab 只打印一行
awk ‘BEGIN{test=”hello,gawk”;print test}’
printf命令
格式化输出:printf “FORMAT” ,item1,item2,…….
1. 必须指定FORMAT
2. 不会自动换行,需要显示给出换行符,\n
3. FORMAT中需要分别为后面每个item指定格式符
格式符:与item一一对应
%c:显示字符的ASCII码
%d,%i:显示字符的十进制数
%e,%E:显示科学计数法值
%f:显示浮点数
%g:以科学计数法或浮点形式显示值
%s:显示字符串
%u:无符号整数
%%:显示自身
修饰符
#[.#]:第一个数字控制显示的宽度;第二个#表示小数点后的精确度,%3.1f
–:左对齐 %-15s
+:右对其 %+d
例子:
awk -F: ‘{printf “%s”,$1}’ /etc/passwd 显示$1的字符串
awk -F: ‘{printf “%s\n”,$1}’ /etc/passwd 换行显示$1
awk -F: ‘{printf “%-20s %10d\n”,$1,$3}’ /etc/passwd
awk -F: ‘{printf “Username:%s UID:%d\n”,$1,$3}’ /etc/passwd
awk -F: ‘{printf “Username:%-15s,UID:%d\n” ,$1,$3}’ /etc/passwd
awk -F: ‘$0 ~ /root/{print $1}’ /etc/passwd 如果包涵root就打印
awk -F: ‘$0 ~ “root”‘ /etc/passwd 打印包含root的行
awk -F: ‘$0 !~ /root/’ /etc/passwd 不打印包含root的行
awk -F: ‘$3==0’ /etc/passwd 打印第三个字段包含0
操作符:&&,|| ,!
实例:
awk -F: ‘$3>=0 && $3<=1000 {print $1}’ /etc/passwd 打印id大于3小于1000的用户
awk -F: ‘$3==0 || $3>=1000 {print $1}’ /etc/passwd 打印id等于3与1000的用户
awk -F: ‘!($3==0){print $1}’ /etc/passwd 打印id不等于3的用户
awk -F: ‘!($3>=500){print $3}’ /etc/passwd 打印id大于3的id
df | awk ‘$1 ~ /^\/dev\/sd/{print $1,$5}’| awk -F% ‘{print $1}’ 打印dev内存使用
seq 10 | awk ‘i=!i’ 打印奇数行
awk控制语句
语法:
if(condition){statement,……}[else statement]
if(condition){statement1}else if(condition2){statement2}
awk -F: ‘{if($3>=100)print $1,$3}’ /etc/passwd $3大于100就打印$1,$3
awk -F: ‘{if($3>=1000){printf “Common user:%s\n”,$1} else {printf “root or user:%s\n”,$1}}’ /etc/passwd
while循环
awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF){print $i,length($i);i++}}’ /etc/grub2.cfg
软件包管理YUM,RPM
二进制应用程序组成部分
二进制文件,库文件,配置文件,帮助文件
查看二进制程序所依赖的文件 ldd /PATH/TO/BINARY_FILE
管理及查看本机装载的库文件 ldconfig
/sbin/ldconfig -p 显示本机已经缓存的所有可用库文件名
配置文件/etc/ld.so.conf.d/, /etc/ld.so.conf.d/*.conf
缓存文件/etc/ld.so.cache
rpm包安装[insttall-options]
–test:测试安装
–nodeps:忽略依赖关系
–replacepkgs
–nosignature 不检查来源合法性
–nodigest不检查包完整性
–noscripts 不执行程序包脚本
-u 安装有旧程序包,则升级。不存在旧版,则安装
-f 安装有旧程序包,则升级。不存在旧版,则不执行操作
–oldpackage:降级安装
–force:强制安装
换内核用-ivh
-e卸载 -a所有包 -f查看指定文件由那个程序包安装生成
-q 针对未安装的程序包查询操作
-c 程序配置文档 -d程序的文档 -l生成的所有文件 -R依赖关系
Yum:
[****]
baseurl=file:// http:// ftp:// https://
gpgcheck=0
enabled=1
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/92451