Linux三剑客
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux三剑客相关的知识,希望对你有一定的参考价值。
awk
awk推荐去看朱双印的博客“awk从放弃到入门”,写的真的很好,本文的awk就总结于它。
awk其实是一门编程语音,它支持条件判断、数组、循环等功能。所以,我们也可以把awk理解成一个脚本语言解释器
1、awk基础
1.1、普通模式
awk 【option】 ‘program’ file1,file2
1.2、特殊模式
1) BEGIN和END模块只能有一个。中间的pattern匹配,可以有多个
NR==2{print $1}NR==5{print $1}
2) BEGIN模块,代表awk在处理文本前要做的事。即使不接收文件名,仅仅使用BEGIN模块打印,也能正常输出
awk ‘BEGIN {print “111”,”222”}’
3) END模块,代表awk在处理文本后要做的事
awk ‘{print $1,$2} END{print ‘333’,’444’}’test
1.3、内置变量
变量名 | 属性 | 备注 |
$0 | 当前记录。即一整行 | |
$1~$n | 当前记录的第n个字段 | awk ‘{print “str:”$1}’ |
FS | 输入字段分隔符,默认space | awk –F ‘:’ awk –v FS=’:’ |
RS | 输入记录分隔符,默认为 | 如果RS=””,会以空白行分隔 |
OFS | 输出字段分隔符,默认space | |
ORS | 输出的记录分隔符,默认 | |
NF | 当前记录中的字段个数,即多少列 | |
NR | 行号,从1开始 | |
FNR | 各文件分别显示行号 | |
FILENAME | 当前文件名 | awk ‘{print FILENAME,$0}’ |
ARGC | 命令行参数的个数 | |
ARGV | 数组,保存的是命令行所给定的参数 | ARGV[0]是awk,单引号中的不算参数,处理的文件是参数 |
1.4、自定义变量
awk除了使用内置变量,还可以自己定义变量。
方法一:-v varname=value 变量名区分字符大小写。-v:设置变量
方法二:在program中定义
1、-v 定义
2、在program定义
2、printf
awk本身负责文本切割,printf动作则负责格式格式化文本。在了解awk的printf动作前,需要首先了解printf命令
2.1、shell的printf命令
在shell中,echo和printf都是输出文本的命令。echo输出的字符串,会自动在末尾加上 ,
而printf不会。printf的作用是按照我们指定的格式输出文本,所以 ,也需要我们自己指定
echo与printf
注意看3,printf的优势就在于,可以用格式替换符,帮我们处理一长串的str
替换符号
格式替换符
名称 | 含义 |
%s | 字符串 |
%f | 浮点格式 |
%b | 对应的参数包含转义字符时,对应的转义字符会被转义 |
%c | ASCII字符,显示对应参数的第一个字符 |
%d,%i | 十进制整数 |
%o | 不带正负号的八进制值 |
%u | 不带正负号的十进制值 |
%x | 不带正负号的十六进制值,用a到f表示10至15 |
%X | 不带正负号的十六进制值,用A到F表示10至15 |
%% | 表示‘%’本身 |
转义字符
名称 | 含义 |
a | 警告字符,常为ASCII的BEL字符 |
后退 | |
c | 不显示输出结果中任何结尾的换行字符(%b格式下的参数字符串依然有效) |
f | 换页(formfeed) |
| 换行 |
| 回车 |
| 水平制表符 |
v | 垂直制表符 |
\ | “”本身 |
ddd | 表示1到3位数八进制值得字符串,仅在字符格式串中有效 |