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

awk文本处理知识总结

电脑杂谈  发布时间:2020-05-06 19:37:26  来源:网络整理

字符数组初始化为0_awk数组_awk数组初始化

参考:

awk是一种编程语言,用于在linux / unix下处理文本和数据. 数据可以来自标准输入(stdin),一个或多个文件或其他命令的输出. 它支持高级功能,例如用户定义的函数和动态正则表达式,并且是linux / unix下的强大编程工具. 它在命令行上使用,但更经常用作脚本. Awk具有许多内置函数,例如数组,函数等. 这与C语言相同,而灵活性是awk的优势.

awk还提供了一系列内置操作函数(例如log,sqr,cos,sin等)和一些函数(例如length,substr等),用于对字符串进行操作(操作). 这些功能的引用大大改善了awk计算功能. 作为条件转移指令的一部分,关系判断是每种编程语言都具有的功能awk数组初始化,awk也不例外. Awk允许进行多次测试. 作为模式匹配,它还提供了模式匹配表达式〜(匹配)和〜!. (不匹配). 作为测试的扩展,awk还支持使用逻辑运算符.

awk命令格式

awk [options]'script'var =值文件(p)

awk [options] -f脚本文件var =值文件(p)

选项具有以下选项:

-F fs: fs是定界符,可以是字符串或正则表达式,此功能是开发定界符

-v: 分配用户定义的变量,并将外部变量传递给awk. VAR = 10000回声| awk -v VARIABLE = $ VAR'{print VARIABLE}'

或者:

var1 =“ aaa”

var2 =“ bbb”

回声| awk'{print v1,v2}'v1 = $ var1 v2 = $ var2

变量在BEGIN,{}和END语句块之后用空格分隔,作为awk命令行参数.

脚本的结构

awk'BEGIN {命令}模式{命令} END {命令}'

awk脚本通常包括: BEGIN语句块,可以使用模式匹配的常规语句块和END语句块. 这三个部分是可选的. 脚本中不会出现任何部分. 脚本通常用单引号或双引号引起来,例如: awk'BEGIN {i = 0} {i ++} END {print i}'文件名

第一步: 执行BEGIN {commands}语句块中的语句;

第二步: 从文件或标准输入(stdin)中读取一行,然后执行模式{commands}语句块,逐行扫描文件,从第一行到最后一行重复此过程直到所有文件都读完.

第3步: 读取输入流的末尾时,执行END {commands}语句块.

BEGIN语句块在awk开始从输入流中读取行之前执行. 这是一个可选的语句块. 诸如变量初始化和打印输出表的标题之类的语句通常可以写在BEGIN语句块中. 在awk从输入流中读取所有行之后,将执行END语句块. 例如,在END语句块中完成信息摘要,例如打印所有行的分析结果. 它也是可选的语句块. 模式块中的常规命令是最重要的部分,也是可选的. 如果未提供任何模式语句块,则默认情况下将执行{print},即,打印读取的每一行,而awk读取的每一行将执行该语句块. 直接打印双引号中的内容. 模式块类似于循环主体,并遍历文件中的每一行.

awk的内置变量

$ n当前记录的第n个字段,例如,第一个字段的n为1,第二个字段的n为2.

awk数组初始化_awk数组_字符数组初始化为0

$ 0此变量包含执行期间当前行的文本内容.

FILENAME当前输入文件的名称.

FS字段分隔符(默认为任何空格).

NF表示字段数,与执行期间的当前字段数相对应.

NR表示记录数,与执行期间的当前行号相对应.

OFMT数字输出格式(默认为%.6g).

OFS输出字段分隔符(默认为空格).

ORS输出记录分隔符(默认为换行符).

RS记录分隔符(默认为换行符).

使用print $ NF打印一行中的最后一个字段,使用$(NF-1)打印倒数第二个字段,依此类推.

统计文件中的行数: awk'END {print NR}'文件名. 这里仅使用END语句块. 读取每一行时,awk会将NR更新为相应的行号. 当最后一行达到NR值时,它是最后一行的行号,因此END语句块中的NR是文件的行数.

每行中第一个字段的累积值: awk'BEGIN {sum = 0; print“ sum: ”} {打印$ 1“ +”; sum + = $ 1} END {打印“等于”;打印金额}'

Awk操作

与普通语言中的操作相同,|| &&,仅〜匹配正则表达式〜!与正则表达式不匹配.

在awk中使用next语句: 在循环中逐行匹配. 如果遇到next,将跳过当前行,并直接忽略以下语句. 而是匹配下一行. 下一条语句通常用于合并多行. 当记录行号除以2和1时,将跳过当前行. 以下打印NR,$ 0将不执行. 下一行开始,程序开始判断NR%2的值. 这时,记录行号为: 2,将执行以下语句块: 'print NR,$ 0'

打印偶数行: awk'NR%2 == 1 {next} {print NR,$ 0;}'awktext.txt

awktext.txt中的内容如下:

跳过包含aa的行: awk'/ ^ aa / {next;} {print“ \ t” $ 0;}'awktest.txt

结果:

Awk允许通过以下方式将结果输出到文件:

回声| awk'{printf(“ hello word!n”)>“ datafile”}'或echo | awk'{printf(“ hello word!n”)>>“ datafile”}'

字符数组初始化为0_awk数组_awk数组初始化

在while,do-while和linux awk语句中,break,continue语句被允许控制流向,而exit等语句也被允许退出. break中断当前正在执行的循环,并跳出循环执行下一条语句. 如果是流程使用情况. 在awk中,流控制语句,语法结构和c语言类型. 它可以在每个命令语句之后使用;分号结束.

awk'BEGIN {

test = 100;

总计= 0;

同时(我<=测试){

总计+ = i;

i ++;

}

总计打印;

}'

awk数组

数组是awk的灵魂. 处理文本中最重要的是数组处理. 因为数组索引(下标)可以是数字和字符串. awk中的数组称为关联数组. awk中的数组不必事先声明,也不需要声明大小. 根据上下文,使用0或空字符串初始化数组元素. 字符串和数字都可以是数组下标.

{for(数组中的项目){print array [item]};}#输出顺序是随机的

{for(i = 1; i <= len; i ++){打印数组[i]};} #Len是数组的长度

获取数组的长度: awk'BEGIN {info =“这是一个测试”;镜头=分割(info,tA,“”);打印长度(tA),镜头;}'

删除数组: 删除数组[key]可以删除,对应于数组键,序列值.

awk中有一些字符串处理函数,如果使用的话可以查询.

打开一个外部文件(关闭用法):

awk'BEGIN {while(“ cat / etc / passwd” | getline){print $ 0;};关闭(“ / etc / passwd”);}'

逐行读取外部文件(如何使用getline):

awk'BEGIN {while(getline <“ / etc / passwd”){print $ 0;};关闭(“ / etc / passwd”);}'

awk'BEGIN {打印“输入您的姓名: ”; getline名称;打印名称;}'

调用外部应用程序(系统使用情况):

awk数组初始化_awk数组_字符数组初始化为0

awk'BEGIN {b =系统(“ ls -al”);打印b;}'

Awk应用示例

单引号和双引号之间的区别在于,外壳程序不解释单引号中的内容,而是直接将其传递给awk,然后先解释双引号中的内容,然后再将其传递给awk.

1,awk'/ 101 /'文件显示文件中包含101的匹配行.

awk'/ 101 /,/ 105 /'文件显示文件文件包含从101到105的匹配行.

awk'$ 1 == 5'文件在文件文件中显示第一个字段值为5的行.

awk'$ 1 ==“ CT”'文件在文件文件中显示具有第一个字段值CT的行. 请注意,它必须用双引号引起来

awk'$ 1 * $ 2> 100'文件显示文件中第一个字段值和第二个字段值的乘积大于100的行.

awk'$ 2> 5 && $ 2 <= 15'文件显示文件文件中第二行的值大于5且小于15的行.

2,awk'{print NR,NF,$ 1,$ NF,}'文件显示当前记录号,字段号以及文件文件中每行的第一和最后一个字段.

awk'/ aa / {print $ 1,$ 2 + 10}'文件显示文件文件匹配行加10的第一和第二字段.

awk'/ aa / {print $ 1 $ 2}'文​​件找到匹配的行awk数组初始化,输出等效于以下语句

awk'/ aa / {print $ 1 $ 2}'文​​件显示了文件文件匹配行的第一和第二字段,但是时间字段的中间没有分隔符.

3,df | awk'$ 4> 1000000'通过管道字符获取输入,例如: 在第四个字段中显示满足条件的行.

4,awk -F“ |” “ {print $ 1}”文件根据新的分隔符“ |”运行.

awk'BEGIN {FS =“ [: \ t |]”}

{print $ 1,$ 2,$ 3}'file通过设置输入分隔符(FS =“ [: \ t |]”)来修改输入分隔符.

Sep =“ |”

awk -F $ Sep'{print $ 1}'文件使用环境变量Sep的值作为分隔符.

awk -F'[: \ t |]''{print $ 1}'文件基于正则表达式的值作为分隔符,它表示空格,: ,TAB和|作为分隔符.

awk -F'[] []''{print $ 1}'文件根据正则表达式的值作为分隔符,这里表示[,]

5,awk -f awkfile文件由awkfile文件的内容顺序控制.

cat awkfile

字符数组初始化为0_awk数组初始化_awk数组

/ 101 / {打印“ \ 047 Hello!\ 047”}-打印'Hello!'. \ 047遇到匹配的行后代表单引号.

{print $ 1,$ 2}-由于没有模式控制,因此打印每行的前两个字段.

6,awk'$ 1〜/ 101 / {print $ 1}'文件在文件中显示与101匹配的第一行(记录).

7,awk'BEGIN {OFS =“%”} {print $ 1,$ 2}'文​​件通过设置输出分隔符(OFS =“%”)来修改输出格式.

8. 获取文件第一个字段的最大值

awk'BEGIN {max = 100; print“ max =” max} BEGIN表示在处理任何行之前的操作.

{max =($ 1> max?$ 1: max);打印$ 1,“现在最大为” max}'文件

9,awk'/ tom / {工资= $ 2 + $ 3;在找到匹配的行后,为变量工资分配一个值并打印该变量.

10,awk'/ tom / {count ++;}

END {打印“找到了tom”,计数为“ times”}}“文件END表示要在处理后处理所有输入行.

11. 在awk中调用系统变量必须使用单引号,如果它是双引号,则意味着一个字符串

标志= abcd

awk'{print'$ Flag'}'的结果为abcd

awk'{print“ $ Flag”}'的结果为$ Flag

12. 例如,以下示例:

a.sh脚本内容

CPU_MIN = 90

cat aa | awk“ {print $ CPU_MIN,$ 1}”

带有参数的参数: a.sh1234

如果您说它应该显示: 901234

但是实际上它只显示90,如果与awk本身的变量定义存在冲突,为什么不采用$ 1的值. 如果未使用任何中间变量,如何将1234传递给awk?

$ 1是awk的特殊变量,不应由shell解释. 可以这样做:

cat aa | awk“ {print $ CPU_MIN,\ $ 1}”


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

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

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