awk的使用和举例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36748278/article/details/81951644

通常情况下,awk 将每个输入行解释为一条记录,将上一行的每个单词解释为每一个字段。
默认情况下,awk使用空格或者制表符作为字段分隔符将输入分隔成字段。如果想要改变字段分隔符,可以使用**-F**。$0 代表整个记录。


-F:指定分割符,可以指定一个或多个作为分割符

用法示例一:
pwd | awk -F"/" '{print $NF}':输出当前所在的文件夹的名称
-F"/"表示把分割符设置成/$NF表示输出分隔后的最后一个字段

[danni@vm-xxx develop]$ pwd
/home/danni/work/develop
[danni@vm-xxx develop]$ pwd | awk -F"/" '{print $NF}'
develop


用法示例二:
已知test.txt的文本内容为:

[danni@vm-xxx log]$ cat test.txt
I am a beautyful girl, I am in class 8

分隔符采用空格和逗号中的一个或多个进行分割:-F'[ ,]+'

[danni@vm-xxx log]$ awk -F'[ ,]+' '{print $5 " " $10}' test.txt 
girl 8

FS:字段分隔符(Field Separator)
FS="\t+" :表示使用一个或多个tab进行分割的分隔符,+ 表示一个或多个前一字符

[danni@vm-xxx develop]$ echo -e "aaa\t\tbbb\n   ccc\tddd" | awk -v FS="\t+" '{print $2}'
bbb
ddd

NF
NF:表示将要显示的一行记录中有多少个字段
$NF:表示显示一行记录中的最后一个字段
示例:使用 -F 指定分隔符为逗号,输出NF表示使用逗号分隔后的字段的数目,$NF表示最后个字段的值

[danni@vm-xxx log]$ echo "a,b,c,d,e" | awk -F',' '{print NF" "$NF}'  
5 e

NR:当前行数
示例:输出行号大于2的行数被分隔后的第一个字段

[danni@vm-xxx log]$ echo -e "one \n two \n three three1" | awk '{if(NR > 2){print $1}}'  
three

BEGIN 和 END
一般情况下,对于每个输入行,awk都会执行每个脚本代码块一次。
awk在处理文本之前处理可以放在BEGIN中。可以用来在开始前设置字段分割符等操作。

OFS:输出字段分隔符(Out of Field Separator)
BEGIN是在文件开始扫描前进行的操作,此处在BEGIN时设置了输出分隔符是 |

[danni@vm-xxx run]$ echo -e "111 222 \n 333 444" | awk 'BEGIN {OFS="|"} {print $1,$2}'  
111|222
333|444

awk正则表达式(Out of Field Separator)

符号 表示的含义
* 与前面的正则表达式的零个或多个出现匹配
. 匹配任何单个字符
\ 转义随后的特殊字符
^ 作为正则表达式的第一个字符,表示匹配行的开始
$ 作为正则表达式的最后一个字符,表示匹配行的结尾
+ 匹配前面的正则表达式的一次或多次出现
匹配前面的正则表达式的零次或一次出现
() 对正则表达式分组
[...] 匹配方括号中的字符类中的任意一个,如果方括号中的第一个字符为^表示否定匹配
{n,m} 匹配它前面某个范围内单个字符出现的次数,{n}将匹配n次出现,{n,}至少匹配n次出现,{n,m}匹配n和m之间的任意次出现

分隔出以逗号作为分隔符,符合指定模式 '/It/'所在行的数据的第一个字段。awk -F, '/It/ {print $1}' AwkDemo.txt

[danni@vm-bestgame-18 study]$ awk -F, '/It/ {print $1}' AwkDemo.txt  
Oh

猜你喜欢

转载自blog.csdn.net/qq_36748278/article/details/81951644