b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

linux命令awk的详细说明

电脑杂谈  发布时间:2020-04-15 12:09:23  来源:网络整理

awk数组长度_perl 数组 长度_json 数组长度

复制代码

if (expression) {
    statement;
    statement;
    ... ...
}
if (expression) {
    statement;
} else {
    statement2;
}
if (expression) {
    statement1;
} else if (expression1) {
    statement2;
} else {
    statement3;
}

复制代码

计算文件夹中文件占用的字节数,并过滤4096个大小的文件(通常是文件夹):

ls -l |awk 'BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}' 
[end]size is  8.22339 M

循环语句

awk中的loop语句也从C语言中借用,并支持while,do / while,for,break和Continue. 这些关键字的语义与C语言中的语义完全相同.

数组

由于awk中数组的下标可以是数字和字母,因此数组的下标通常称为键. 值和关键字存储在用于键/值哈希的内部表中. 由于哈希没有按顺序存储,因此您会发现在显示数组的内容时,它们不会按预期的顺序显示. 使用数组和变量时会自动创建它们. Awk还会自动确定它存储数字还是字符串. 通常,awk中的数组用于从记录中收集信息,这些记录可用于计算总和,对单词计数,跟踪模板匹配的次数等等.

显示/ etc / passwd的帐户

复制代码

awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
0 root
1 daemon
2 bin
3 sys
4 sync
5 games
......

复制代码

这里我们使用for循环遍历数组

awk编程内容非常多,这里仅列出简单和常用的用法

================================================ ================================================== ====

awk是一种行处理器: 与屏幕处理的优点相比,处理大文件时不会出现内存溢出或处理速度慢的问题. 通常用于格式化文本信息

awk处理过程: 依次处理每行,然后输出

Awk命令格式:

awk [-F | -f | -v]‘BEGIN {} // {command1; command2} END {}”文件

[-F | -f | -v]大参数,-F指定分隔符,-f调用脚本,-v定义变量var = value

''参考代码块

开始初始化代码块. 在处理每一行之前,初始化代码主要引用全局变量并设置FS分隔符

//匹配的代码块,可以是字符串或正则表达式

{}命令代码块,包含一个或多个命令

;多个命令之间用分号分隔

END结束代码块,这是在处理每一行之后执行的代码块,主要用于最终计算或输出结束摘要信息

特殊点:

$ 0表示整个当前行

$ 1每行的第一字段

NF场量变量

每行NR记录号,多文件记录增量

FNR与NR类似,但是多文件记录不会递增,每个文件从1开始

\ t标签

\ n换行符

在FS开始时定义分隔符

RS输入记录分隔符,默认为换行符(即,文本逐行输入)

〜匹配,与==

的比较不完全

! 〜不匹配,比较不准确

awk数组长度_perl 数组 长度_json 数组长度

==相等,必须全部相等,精确比较

! =不相等,精确比较

&&逻辑与

||逻辑或

+匹配时,表示一个或多个

/ [0-9] [0-9] + /两个或多个数字

/ [0-9] [0-9] * /一个或多个数字

FILENAME文件名

OFS输出字段分隔符,默认也是一个空格,可以更改为制表符等.

记录由ORS输出的分隔符​​,默认为换行符,即处理结果也逐行输出到屏幕上

-F'[: #/]'定义了三个分隔符

打印&$ 0

print是awk打印指定内容的主要命令

awk'{print}'/ etc / passwd == awk'{print $ 0}'/ etc / passwd

awk'{print“”}'/ etc / passwd //不输出passwd的内容,但输出相同数量的空行,进一步说明awk逐行处理文本

awk'{print“ a”}''/ etc / passwd //输出相同的行数,每行只有一个字母

awk -F“: ”'{print $ 1}'/ etc / passwd

awk -F: '{print $ 1; print $ 2}'/ etc / passwd //每行的前两个字段在单独的行中输出,以进一步了解逐行处理文本的过程

awk -F: '{print $ 1,$ 3,$ 6}'OFS =“ \ t” / etc / passwd //输出字段1,3,6,以制表符作为分隔符

-f指定脚本文件

awk -f script.awk文件

BEGIN {

FS =“: ”

{print $ 1} //效果与awk -F“: ”'{print $ 1}'相同,除了使用FS在代码本身中指定分隔符

awk'开始{X = 0} / ^ $ / {X + = 1} END {打印“我发现”,X,“空白行”. }'测试

我发现4个空行.

ls -l | awk'BEGIN {sum = 0}! / ^ d / {sum + = $ 5} END {打印“ total size is”,sum}'//计算文件大小

总大小为17487

-F指定分隔符

$ 1是指定分隔符后的第一个字段,$ 3是第三个字段,\ t是制表符

将一个或多个连续的空格或制表符视为一个定界符,即,将多个空格视为一个空格

awk -F“: ”'{print $ 1}'/ etc / passwd

awk -F“: ”'{print $ 1 $ 3}'/ etc / passwd // $ 1和$ 3连接且输出时没有分隔

awk -F“: ”'{print $ 1,$ 3}'/ etc / passwd //多余的逗号$ 1和$ 3用空格隔开

awk -F“: ”'{print $ 1“” $ 3}'/ etc / passwd //在$ 1和$ 3之间手动添加空格以分隔

awk -F“: ”'{print“用户名: ” $ 1“ \ t \ t Uid: ” $ 3}''/ etc / passwd //自定义输出

awk -F: '{print NF}'/ etc / passwd //显示每行有多少字段

awk-F: '{print $ NF}'/ etc / passwd //打印每行的NF字段的值

awk -F: 'NF == 4 {print}'/ etc / passwd //仅显示4个字段的行

awk -F: 'NF> 2 {print $ 0}'/ etc / passwd //显示每行超过2个字段的行

json 数组长度_perl 数组 长度_awk数组长度

awk'{print NR,$ 0}'/ etc / passwd //输出每行的行号

awk -F: '{print NR,NF,$ NF,“ \ t”,$ 0}'/ etc / passwd //打印行号,字段号,最后一个字段值,制表符,每行内容

awk -F: 'NR == 5 {print}'/ etc / passwd //显示第5行

awk -F: 'NR == 5 || NR == 6 {print}'/ etc / passwd //显示第5和6行

路线-n | awk'NR! = 1 {print}'//不显示第一行

//匹配代码块

//纯字符匹配! //纯字符不匹配〜//字段值匹配! 〜//字段值不匹配〜/ a1 | a2 /字段值匹配a1或a2

awk'/ mysql /'/ etc / passwd

awk'/ mysql / {print}'/ etc / passwd

awk'/ mysql / {print $ 0}'/ etc / passwd //这三个指令的结果相同

awk'! / mysql / {print $ 0}'/ etc / passwd //输出行与mysql不匹配

awk'/ mysql |邮件/ {print}'/ etc / passwd

awk'! / mysql |邮件/ {print}'/ etc / passwd

awk -F: '/ mail /,/ mysql / {print}'/ etc / passwd //间隔匹配

awk'/ [2] [7] [7] * / {print $ 0}'/ etc / passwd //匹配以数字27开头的行,例如27,277,2777 ...

awk -F: '$ 1〜/ mail / {print $ 1}'/ etc / passwd // $ 1仅在显示指定内容时匹配

awk -F: '{if($ 1〜/ mail /)print $ 1}'/ etc / passwd //与上面相同

awk -F: “ $ 1! 〜/ mail / {print $ 1}'/ etc / passwd //不匹配

awk -F: “ $ 1! 〜/邮件| mysql / {print $ 1}'/ etc / passwd

必须在{}中使用,并且比较内容用()扩展

awk -F: '{if($ 1〜/ mail /)print $ 1}'/ etc / passwd //速记

awk -F: '{if($ 1〜/ mail /){print $ 1}}'/ etc / passwd //全部写入

awk -F: '{if($ 1〜/ mail /){print $ 1} else {print $ 2}}'/ etc / passwd //如果... else ...

条件表达式

==! = >> =

awk -F“: ”'$ 1 ==“ mysql” {print $ 3}'/ etc / passwd

awk -F“: ”'{if($ 1 ==“ mysql”)print $ 3}'/ etc / passwd //与上面相同

awk -F“: ”'$ 1! =“ mysql” {print $ 3}'/ etc / passwd //不相等

awk -F“: ”'$ 3> 1000 {print $ 3}'/ etc / passwd //大于

awk -F“: ”'$ 3> = 100 {print $ 3}'/ etc / passwd //大于或等于

awk -F“: ”'$ 3 <1 {print $ 3}'/ etc / passwd //小于

awk -F“: ”'$ 3 <= 1 {print $ 3}'/ etc / passwd //小于或等于

逻辑运算符

&& ||

awk -F: '$ 1〜/ mail / && $ 3> 8 {print}'/ etc / passwd //逻辑与,$ 1匹配mail,$ 3> 8

awk -F: '{if($ 1〜/ mail / && $ 3> 8)print}'/ etc / passwd

awk -F: '$ 1〜/ mail / || $ 3> 1000 {print}'/ etc / passwd //逻辑或

awk -F: '{if($ 1〜/ mail / || $ 3> 1000)print}'/ etc / passwd

数值运算

awk -F: '$ 3> 100'/ etc / passwd

perl 数组 长度_json 数组长度_awk数组长度

awk -F: '$ 3> 100 || $ 3 <5'/ etc / passwd

awk -F: '$ 3 + $ 4> 200'/ etc / passwd

awk -F: '/ mysql | mail / {print $ 3 + 10}'/ etc / passwd //在第三个字段中添加10以进行打印

awk -F: '/ mysql / {print $ 3- $ 4}'/ etc / passwd //减法

awk -F: '/ mysql / {print $ 3 * $ 4}'/ etc / passwd //乘积

awk'/ MemFree / {print $ 2/1024}'/ proc / meminfo //部门

awk'/ MemFree / {print int($ 2/1024)}'/ proc / meminfo //四舍五入

输出分隔符OFS

awk'$ 6〜/ FIN / || NR == 1 {print NR,$ 4,$ 5,$ 6}'OFS =“ \ t” netstat.txt

awk'$ 6〜/等待/ || NR == 1 {print NR,$ 4awk数组长度,$ 5,$ 6}'OFS =“ \ t” netstat.txt

//输出字段6与WAIT行匹配,该行输出每行的行号,字段4、5、6,并使用制表符分隔字段

将处理结果输出到文件

①直接输出路径-n | awk'NR! = 1 {print>“ ./fs”}'在命令代码块中

②使用重定向输出路径-n | awk'NR! = 1 {print}'> ./fs

格式化输出

netstat -anp | awk'{printf“%-8s%-8s%-10s \ n”,$ 1,$ 2,$ 3}'

printf表示格式输出

%格式化的输出分隔符

-8长8个字符

s表示字符串类型

打印每行的前三个字段,指定第一个字段输出字符串类型(长度8),第二个字段输出字符串类型(长度8),

第三个字段输出字符串类型(长度为10)

netstat -anp | awk'$ 6 ==“听” || NR == 1 {printf“%-10s%-10s%-10s \ n”,$ 1,$ 2,$ 3}'

netstat -anp | awk'$ 6 ==“听” || NR == 1 {printf“%-3s%-10s%-10s%-10s \ n”,NR,$ 1,$ 2,$ 3}'<

awk -F: '{if($ 3> 100)打印“大”;否则打印“ small”}'/ etc / passwd

awk -F: 'BEGIN {A = 0; B = 0} {if($ 3> 100){A ++;打印“大”}其他{B ++;打印“小”}} END {打印A,“ \ t”,B}'/ etc / passwd

// ID大于100,A加1,否则B加1

awk -F: '{if($ 3 <100)接下来; else print}'/ etc / passwd //跳过少于100,否则显示

awk -F: 'BEGIN {i = 1} {if(i

awk -F: 'BEGIN {i = 1} {if(i

另一种形式

awk -F: '{print($ 3> 100?“ yes”: “ no”)}'/ etc / passwd

awk -F: '{print($ 3> 100?$ 3“: \ tyes”: $ 3“: \ tno”)}''/ etc / passwd

awk -F: 'BEGIN {i = 1} {while(i

json 数组长度_awk数组长度_perl 数组 长度

7个根1

7 x 2

7 0 3

7 0 4

7根5

7 /根6

netstat -anp | awk'NR! = 1 {a [$ 6] ++} END {for(i in a)print i,“ \ t”awk数组长度,a [i]}'

netstat -anp | awk'NR! = 1 {a [$ 6] ++} END {对于(i in a)printf“%-20s%-10s%-5s \ n”,i,“ \ t”,a [i]}'

9523 1

9929 1

听6

7903 1

3038 / cupsd 1

7913 1

10837 1

9833 1

awk -F: '{print NF}'helloworld.sh //输出文件每一行中有多少个字段

awk -F: '{print $ 1,$ 2,$ 3,$ 4,$ 5}'helloworld.sh //输出前5个字段

awk -F: '{print $ 1,$ 2,$ 3,$ 4,$ 5}'OFS ='\ t'helloworld.sh //输出前5个字段并使用制表符分隔输出<


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-176501-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 王安石
      王安石

      而不是大陆

    • 北海王慕容超
      北海王慕容超

      老百姓希望经济形势好转

    热点图片
    拼命载入中...