您的位置:时时app平台注册网站 > 时时app平台注册网站 > awk

awk

2019-11-28 03:33

awk命令内置变量:

  • $n:黄金时代行的第n个字段
  • $0:生机勃勃行的全部内容
  • ACR-VGC:命令行的参数个数
  • ARubiconGV:命令行参数的数组
  • CONVFMT:数字调换格式(私下认可值为%.6g)ENVIRON情况变量关联数组
  • EEvoqueTiguanNO:最终贰个连串错误的描述
  • FIELDWIDTHS:字段宽度列表(用空格键分隔)
  • FILENAME:文件名
  • FN奥迪Q5 :各文件分别计数的行号
  • FS:字段分隔符(暗中同意是任何空格)
  • IGNORECASE:忽略大小写的相配
  • NF:字段个数
  • N汉兰达:管理的行数
  • OFMT:数字的出口格式(私下认可值是%.6g)
  • OFS :字段输出分隔符
  • O凯雷德S:行输出分隔符
  • 索罗德LENGTH:由match函数所相称的字符串的长短
  • 奥迪Q5S:记录分隔符(暗中认可是一个换行符)
  • KugaSTART:由match函数所相称的字符串的第2个岗位
  • SUBSEP:数组下标分隔符(暗中认可值是/034)

    ### 例子

输出第一行:awk -F ":" 'NR==1{print }' /etc/passwd

输出最后一行:awk -F ":" 'END{print }' /etc/passwd

6.2 - 字符串

  1. gsub(reg,str1,str2) 使用str1替换全数str第22中学切合正则表明式reg的子串
  2. sub(reg,str1,str2) 含义与gsub雷同,只然而gsub是替换全体相称,sub只替换第叁个门户至极
  3. index(str,substr) 再次回到substr在str中第二次现身的目录,注意索引从1起来总计,若无则再次来到0
  4. length(str) 重临str字符串的尺寸,length函数仍可以够回去数组成分的个数
  5. blength(str) 再次回到字符串的字节数
  6. match(str,reg) 与index函数同样,只不过reg使用正则表达式,比如match("hello",/lo/)
  7. split(str,array,reg)将str分隔成数组保存到array中,分隔使用正则reg,只怕字符串都足以,重临数CEO度
  8. tolower(str) 转换为题写
  9. toupper(str) 调换为题写
  10. substr(str,start,length) 截取字符串,从start索引早前的length个字符,如不内定length则截取到结尾,索引从1始发

awk笔记

awk:
awk名来:多少个姓名的缩写,他们是:Aho、(Peter)Weinberg 和(Brain)Kernighan;
行管理时方可管理行内字段,那是grep/sed搞不定的;特殊地,用$0表示正行;
用法:awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]
-F 列分隔符;
prog:'pattern {action}',pattern是一定字符串,帮助正则,如cat uids | awk '/[0-9] .[0-9]*/{print}';
-f:切合awk语法的本子文件;
in_file:输入文件,允许多少个输入文件;???
pattern字符表示:
换码类别
^ 在字符串的开头开始相配
$ 在字符串的最终起头相配
. 与其余单个字符串相称
[ABC] 与[]内的任一字符相称
[A-Ca-c] 与 A-C 及 a-c 范围内的字符相称(按字母表顺序)
[^ABC] 与除[]内的持有字符以外的任一字符相称
Desk|Chair 与 Desk 和 Chair 中的任多个特别
[ABC][DEF] 关联。与 A、B、C 中的任一字符相称,且其后要跟 D、E、F 中的任叁个字符。
[ABC]* 与 A、B 或 C 中任三个并发 0 次或频仍的字符相相称
[ABC] 与 A、B 或 C 中其它叁个现身 1 次或频仍的字符相相配
? 与叁个空白或 A、B 或 C 在别的二个字符相相配
(Blue|Black)berry 合并常规表明式,与 Blueberry 或 Blackberry 相相称
算术运算符:
x^y x 的 y 次幂
x**y 同上
x%y 计算 x/y 的余数(求模)
x y x 加 y
x-y x 减 y
x*y x 乘 y
x/y x 除 y
-y 负 y(y 的按钮符号);也称一目减
y y 加 1 后使用 y(前置加)
y 使用 y 值后加 1(后缀加)、
--y y 减 1 后使用 y(前置减)
y-- 使用后 y 减 1(后缀减)
x=y 将 y 的值赋给 x
x =y 将 x y 的值赋给 x
x-=y 将 x-y 的值赋给 x
x*=y 将 x*y 的值赋给 x
x/=y 将 x/y 的值赋给 x
x%=y 将 x%y 的值赋给 x
x^=y 将 x^y 的值赋给 x
x**=y 将 x**y 的值赋给 x
逻辑运算符:
x==y
x!=y
x>y
x>=y
x<y
x<=y
x~re
x!~re
松开变量:
AXC90GC: 命令行参数的数量。
A奥迪Q3GIND: 命令行中当前文件的职位(从0伊始算)。
A奥德赛GV: 满含命令行参数的数组。
CONVFMT: 数字调换格式(私下认可值为%.6g)
ENVIRON: 情形变量关联数组。
E奥迪Q3中华VNO: 最终贰个种类错误的描述。
FIELDWIDTHS: 字段宽度列表(用空格键分隔)。
FILENAME: 当前文件名。
FN翼虎: 同NOdyssey,但针锋相投于当下文件。
FS: 字段分隔符(暗中同意是其他空格)。
IGNORECASE: 假如为真,则张开忽略大小写的相配。
NF: 当前记下中的字段数。
N中华V: 当前记录数。
OFMT: 数字的输出格式(暗中认可值是%.6g)。
OFS: 输出字段分隔符(暗中同意值是四个空格)。
O福特ExplorerSL : 输出记录分隔符(暗中同意值是一个换行符)。
CRUISERLENGTH: 由match函数所相称的字符串的长短。
QashqaiS: 记录分隔符(暗中认可是二个换行符)。
RubiconSTART: 由match函数所相称的字符串的第三个岗位。
SUBSEP: 数组下标分隔符(默许值是\034)
置于函数:类C风格用法;
printf:格式化输出,举例 awk '{printf "d%sn",NR,$1}' myfile
N gsub(reg,string,target) 每便常规表明式 reg 相称时替换 target 中的 string
N index(search,string) 重临 string 中 search 串的地点
A length(string) 求串 string 中的字符个数
N match(string,reg) 再次来到不荒谬表明式 reg 相称的 string 中的地点
N printf(format,variable) 格式化输出,按 format 提供的格式输出变量 variable。
N split(string,store,delim) 依据分界符 delim,分解 string 为 store 的数组成分
N sprintf(format,variable) 重回二个饱含基于 format 的格式化数据,variables 是要放置串中的数据
G strftime(format,timestamp) 返 回 大器晚成 个 基 于 format 的 日 期 或 者 时 间 串 ,timestmp 是 systime()函数再次回到的年月
N sub(reg,string,target) 第一遍当健康表明式 reg 相配,替换 target 串中的字符串
A substr(string,position,len) 重返一个以 position 开头 len 个字符的子串
P tolower(string) 重回 string 中对应的小写字符
P toupper(string) 重返 string 中对应的大写字符
A atan(x,y) x 的余切(弧度)
N cos(x) x 的余弦(弧度)
A exp(x) e 的 x 幂
A int(x) x 的整数部分
A log(x) x 的当然对数值
N rand() 0-1 之间的即兴数
N sin(x) x 的正弦(弧度)
A sqrt(x) x 的平方根
A srand(x) 最初化随机数发生器。假使忽略 x,则使用 system()
G system() 重返自 壹玖陆柒 年 1 月 1 日的话通过的年华(按秒总括)
流程序调控制:
逻辑运算符:......
BEGIN/END:
if-else:
while/do-while/for/
break/continue/exit(退出但不跳过END)
next:读取下一条记下;
内容调节:
读入文件:getline
关门文件:close,能够本着getline展开的文书;
导出文件: printf("hello word!n")>>"datafile"
导出到其余命令:printf("hello word!n")|"sort -t','"
读入其余命令结果:who -u | awk '{printf("%s 正在施行%sn",$2,$1)}'
在 awk 中实行 shell 命令行:嵌入函数 system(),该函数将传给它的参数视作命令实行:END {close("myreport.txt");system("lp myreport.txt");}
示例:
展示文本第7~15行:awk -F % 'N汉兰达==7,NTiggo==15 {printf $1 $3 $7}'

技巧or注意:
1 假若要让 awk所接受变量的分明项目,应当在在程序中给它赋初值;awk不晓得时默许字符串类型;
2 假设读入某列是数值且做数值管理时,即便某行该列不是官方数字,则awk将其视为0处理;
3 for ( x in myarray )打字与印刷数组时,并不遵照顺序,可能是乱序输出;
4 if (1 in fooarray),数组是或不是含有该值????好像不起功效啊
5

awk: awk名来:三个姓名的缩写,他们是:Aho、(Peter)Weinberg 和(Brain)Kernighan; 行处理时方可拍卖行内字段,那是grep/sed搞不定的;特殊地...

awk命令是一个行处理命令,每一回读取少年老成行,然后开展管理,能够壹次拍卖五个文件

6 - awk平放函数

awk定义了比相当多置于函数,下边大家依据函数类型列出常用的函数,下边的函数只是生机勃勃部分,完整的函数列表则必要查阅awk的法定文档

awk命令格式:

awk [-F|-f|-v] ‘BEGIN{} {command1; command2} END{}’ file1 file2 ...

分割符:-F: , -F ':',-F '[.,/]' 二种格局都能够

2 - awk命令的相同组成

awk最常用的行事平常是遍历一个文件中的每一行,然后分别对文件的每一行进行处理,叁个完完全全的awk命令格局如下:

awk [options]  'BEGIN{ commands }  pattern{ commands }  END{ commands }' file
  • options: 表示awk的可选的通令行选项, -F -f -v 。-F指定将文件中每风度翩翩行分隔成列的分隔符
  • 单引号后边的剧情正是百分百的awk程序脚本,awk必要对文件每生龙活虎行分割后的每一列做拍卖
  • file则是awk要处理的文件名称
  • -F: 钦点分隔符
  • -f: 调用剧本
  • -v: 定义变量
  • ‘’: 援引代码块
  • BEGIN: 开始化代码块
  • //: 相配代码块,能够是字符串或正则表明式
  • {}: 命令代码块,包罗一条或多条命令
  • : 多条命令使用分号分隔
  • END: 结尾代码块

独特用法:
$0 表示整个当前进
NF 字段数量变量
NENCORE 每行的记录号,多文件记录依次增加
t 制表符
n 换行符
~ 相称,与==比较不是纯粹比较
!~ 不匹配,不准确相比较
-F'[:#/]' 定义多个分隔符

awk对每一行进行分割处理
[root@datanode1 ~]# echo -e '1 2 3 4n 5 6 7 8 9' | awk '{print $3 " " $2 " " $1}'
3 2 1
7 6 5
  1. 将字符串 1 2 3 4 通过管道传递给awk命令,相当于awk管理一个文书,内容正是 1 2 3 4
  2. 上边包车型地铁授命并不曾增多 -F 内定分割符号,实际上默认情况下awk使用空格分割每一行
  3. 借使急需钦定其余字符则选取-F展现钦命
  4. 地点的一声令下是将 1 2 3 4 通过空格(不管列之间有稍微个空格都将用作二个空格管理)分割成4列
  5. 在awk中有后生可畏种通过$数字引用的变量,援引的是当前进中分割的每一列的内容,数字的序号从1起来。举例$1表示第1列的剧情,$2表示第二列,由此及彼。$0 表示近些日子整行的内容。
  6. print是awk的松开函数,用于打字与印刷出变量的值。 而我辈在$3 $2 $1 以内增加了用双引号引起来的空格,如果未有,则那一个变量的值打字与印刷出来会连在一同。
  7. 此地的awk命令中{}里面包车型客车颠末其实是大家地方完整格局的中游有个别,大家大致了地方的BEGIN块,END块,何况中间的前后相继块大家也省略掉了pattern部分,约等于固然不增添BEGIN或许END表达那么该程序块正是地点完整形式中的中间的丰盛程序块,该中间的程序块所举办的操作就是循环管理公事内容的每意气风发行,倘使文件有10行,那么中间的主次块要运转11次,每三回拍卖豆蔻年华行的内容,而且管理完当前进之后,后一次循环会自动依次拍卖接下去的行内容。

6.3 - 其他:

  1. system(command) 执行系统命令,重返降出码
  2. mktime( YYYY MM dd HH MM ss[ DST]) 生成时间格式
  3. strftime(format,timestamp) 格式化时间输出,将时刻戳转变为时间字符串
  4. systime() 得届期间戳,重临从一九六三年六月1日始于到眼下岁月(不计闰年)的整秒数

3 - 使用pattern部分

[root@datanode1 ~]# echo -e '1 2 3 4n 5 6 7 8 9' | awk '$1 > 2{print $3 " " $2 " " $1}'
7 6 5

$1 > 2{print $3 " " $2 " " $1} => pattern{ commands }

  • $1 > 2: 第生龙活虎行高于2, 不然不管理这意气风发行
  • pattern部分用来从文件中筛选出须要管理的行开展拍卖,若无则循环处理公事中的全体行

pattern部分可以是别的条件表明式的剖断结果,举例>,<,==,>=,<=,!= 相同的时间还足以行使 ,-,*,/运算与标准表明式相结合的复合表达式,逻辑 &&,||,! 相符也足以行使进来。其它pattern部分还足以行使 /正则/ 接收要求处理的行。

1- awk是什么

awk是linux情况下的二个命令行工具,然而由于awk强盛的力量,我们得感觉awk工具传递叁个字符串,该字符串的内容类似一种编程语言的语法,大家能够称其为Awk语言,而awk工具自身则足以看做是Awk语言的深入分析器。就好比python解析器与Python语言的关系。咱们平日接收awk来做什么样,awk又顺应做什么样工作吗。由于awk天生提供对文件中文本分列举行管理,所以若是二个文本中的每行都被特定的分隔符(经常见到的是空格)隔绝,大家得以将以此文件作为是由很多列的文本组成,那样的公文最符合用awk进行拍卖,其实awk在工作中超级多时候被用来管理log文件,进行部分总计职业等。

6.4 - awk的放到变量

awk中平等定义了众多内置变量,大家得以直接像使用普通变量同样接受他们,由于awk的本子众多,有个别内置变量并非获取全体awk版本的支撑。

说明:[A][N][P][G]意味着援助该变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk

  1. $n 当前记下的第n个字段,比方n为1表示第贰个字段,n为2表示第2个字段
  2. $0 那些变量包涵实施进度中当前进的文件内容
  3. [N] ALANDGC 命令行参数的数额
  4. [G] A福特ExplorerGIND 命令行中当前文件的地点(从0开始算卡塔 尔(英语:State of Qatar)
  5. [N] A奥迪Q5GV 富含命令行参数的数组
  6. [G] CONVFMT 数字调换格式(暗中同意值为%.6g卡塔尔国
  7. [P] ENVIRON 情况变量关联数组
  8. [N] E大切诺基SportageNO 最终二个连串错误的陈诉
  9. [G] FIELDWIDTHS 字段宽度列表(用空格键分隔卡塔 尔(英语:State of Qatar)
  10. [A] FILENAME 当前输入文件的名
  11. [P] FN奥迪Q7 同N奥迪Q5,但针锋相投于当下文件
  12. [A] FS 字段分隔符(私下认可是任何空格卡塔尔
  13. [G] IGNORECASE 若是为真,则实行忽略大小写的合营
  14. [A] NF 表示字段数,在推行进程中对应于当前的字段数
  15. [A] N路虎极光 表示记录数,在推行进程中对应于当前的行号
  16. [A] OFMT 数字的出口格式(暗中认可值是%.6g卡塔尔国
  17. [A] OFS 输出字段分隔符(私下认可值是三个空格卡塔 尔(阿拉伯语:قطر‎
  18. [A] OLX570S 输出记录分隔符(默许值是一个换行符卡塔尔
  19. [A] SportageS 记录分隔符(私下认可是三个换行符卡塔尔
  20. [N] 智跑START 由match函数所相配的字符串的率先个任务
  21. [N] 奥迪Q5LENGTH 由match函数所相配的字符串的长短
  22. [N] SUBSEP 数组下标分隔符(暗中认可值是34卡塔尔

awk官方文书档案:
https://www.gnu.org/software/gawk/manual/gawk.html

6.1 - 算术:

  1. atan2(y,x) 重临 y/x 的反正切
  2. cos(x) 返回 x 的余弦;x 是弧度
  3. sin(x) 返回 x 的正弦;x 是弧度
  4. exp(x) 返回 x 幂函数
  5. log(x) 再次来到 x 的自然对数
  6. sqrt(x) 返回 x 平方根
  7. int(x) 再次来到 x 的截断至整数的值
  8. rand() 重回任性数字 n,当中 0 <= n < 1
  9. srand([expr]) 将 rand 函数的种子值设置为 Expr 参数的值,或只要轻便Expr 参数则动用某天的小时。重临先前的种子值

4 - BEGIN语句块

BEGIN语句块是在万分文件第一行之前运维的语句块。由于是特别第豆蔻梢头行在此以前运转,实际上在BEGIN语句块中 $n 是不可用的。经常景色下能够在BEGIN语句块中做一些变量(awk中能够自定义变量,直接为三个变量赋值就定义了一个变量,awk中未有特地定义变量的重大字)开首化的事业,以至一些只须求在初叶仅打字与印刷三次的输出新闻(比方输出表的表头)

[root@datanode1 ~]# echo -e 'words in filenthe second line' | awk 'BEGIN{print "this is begin"; print ""} {print $1 " " $2 " " $3 " "}'
this is begin

words in file 
the second line 
  1. BEGIN必需为题写
  2. BEGIN中四个语句块用;分隔
  3. 如若急需单独打字与印刷空行,须求使用 print ""

5 - END语句块

END语句块是在awk循环推行完全体行的拍卖以往才实行的,与BEGIN相近,END语句块也只进行三回,大家看看完整的事例。

[root@datanode1 ~]# echo -e 'words in filen the second line' | awk 'BEGIN{print "this is begin"; print ""} {print $1 " " $2 " " $3 " "} END{print "end"}'
this is begin

words in file 
the second line 
end

小例子,计算和:

[root@datanode1 ~]# echo -e "11 22 33n44 55 66n77 88 99" > test.log
[root@datanode1 ~]# cat test.log 
11 22 33
44 55 66
77 88 99
[root@datanode1 ~]# awk 'BEGIN{sum=0} {sum =$1} END{print sum}' test.log 
132

本文由时时app平台注册网站发布于时时app平台注册网站,转载请注明出处:awk

关键词: