三剑客

awk

awk是一种编程语言,主要用于在linux/unix下对文本和数据进行处理,是linux/unix下的一个工具。数据可以来自标准输入、一个或多个文件,或其它命令的输出。awk的处理文本和数据的方式:逐行扫描文件,默认从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作?awk的语法: awk [options] ‘commands(地址定位)‘  file(s)options 部分  -F 定义字段分割符号,默认的分隔符是空格        -v 定义变量并赋值    command 部分:    ‘范围说明或正则表达式或者{awk命令语句1;awk命令语句2;...}‘    ‘BEGIN{}       {}         END{}‘     行处理前      行处理  行处理后?    1、范围说明部分可以是BEGIN、END、逻辑表达式或者为空    2、awk命令语句间用分号间隔    3、引用shell变量需用双引号引起?awk的工作原理:# awk -F: ‘{print $1,$3}‘ /etc/passwd(1)awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符(RS)结束?(2)然后,行被:(默认为空格或制表符)分解成字段(或域),每个字段存储在已编号的变量中,从$1开始。?(3)awk如何知道用空格来分隔字段的呢? 因为有一个内部变量FS来确定字段分隔符。初始时,FS赋为空格?(4)awk打印字段时,将以设置的方法使用print函数打印,awk在打印的字段间加上空格,因为$1,$3之间有一个逗号。逗号比较特殊,它映射为另一个内部变量,称为输出字段分隔符OFS,OFS默认为空格?(5)awk输出之后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕?awk的基本应用:$0  :表示当前所有记录$1,$2,$3...$n:awk中用该顺序形式表示files中每行以间隔符号分割的各列的不同字段注:awk默认以空格符为间隔符号将每行分割为单独的字段,也可以使用awk内置变量FS定义间隔符号awk -F: ‘‘awk ‘BEGIN{FS=":"}‘    NF          表示当前记录的字段数(列数)$NF     最后一列$(NF-1) 倒数第二列FNR/NR  行号FILENAME 文件名"\t"        制表符"\n"        换行符""          打印字符串FS      定义间隔符OFS         定义输出字段分隔符RS          输入记录分割符,默认换行ORS     输出记录分割符,默认换行print   打印函数??一:创建一个文件1.txt?my first language:Javasecond languange:pythonthird language:C??用法:1、awk ‘{print $0}‘ 1.txt  表示print表示打印, $0 表示整个记录,1.txt表示一个文件,所以此条指令的结果就是把这整个文件打印出来结果:my first language:Javasecond languange:pythonthird language:C??2、awk ‘{print $1}‘ 1.txt  表示:打印文本的第一列结果:mysecondthird??3、awk -F ‘:‘ ‘{print $2}‘ 1.txt   表示以":"为分隔符,打印第2列  -F表示指定分割符,也可以是要查询的文本中的其他分割符。结果:Javapythonc??4、awk -F ‘:‘ ‘$2=="Java"{print $2}‘  表示以":"为分隔符,限制在":"分隔符的第二列为Java的那一项结果:Java??5、awk -F ‘:‘ ‘NR % 2 ==1 {print $2}‘ 1.txt  表示:打印奇数行的第二个字段 NR是一个内置的变量,表示当前正在处理的记录,即当前的记录是第几个记录。结果:Java c??6、awk ‘{if(NR >1) print $2}‘ 1.txt  表示打印第二个及其以后的记录,上面的字段分隔符是空格了,并且 if 语句是在“{}” 里指定的。结果:languange:pythonlanguage:C??7、awk ‘{if($1 < "s") print $1; else print $2}‘ 1.txt  表示:如果第一个字段大于“s",则打印第一个字段,否则打印第二个字段。结果:mylanguange:pythonlanguage:C??8、awk提供了一些内置函数来供我们使用,以下常用的函数如下:tolower():字符转为小写。toupper():字符转为大写length():返回字符串长度。substr():返回子字符串。sqrt():平方根。rand():随机数。例子:

相关推荐