目录
一、谈谈我对awk的理解
二、常用命令总结
三、awk变量
四、举例说明
一、谈谈我对awk的理解
awk
是一种用于文本处理和数据提取的命令行工具,它通过模式匹配和操作来处理输入数据并生成输出。
二、常用命令总结
-
-F fs:fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
-
-v var=value:赋值一个用户定义变量,将外部变量传递给awk
-
-f scripfile:从脚本文件中读取awk命令
三、awk变量
-
FS :输入字段分隔符,默认为空白字符
-
OFS :输出字段分隔符,默认为空白字符
-
RS :输入记录分隔符,指定输入时的换行符,原换行符仍有效
-
ORS :输出记录分隔符,输出时用指定符号代替换行符
-
NF :字段数量,共有多少字段, $NF引用最后一列,$(NF-1)引用倒数第2列
-
NR :行号,后可跟多个文件,第二个文件行号继续从第一个文件最后行号开始
-
FNR :各文件分别计数, 行号,后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始
-
FILENAME :当前文件名
-
ARGC :命令行参数的个数
-
ARGV :数组,保存的是命令行所给定的各参数,查看参数
四、举例说明
1.这里我们创建了名为demo.txt文件,我们使用:为分隔符分别取出$1和$2
[root@along ~]# cat demo.txt
hello:world
linux:redhat:lalala:hahaha
along:love:youou
[root@along ~]# awk -v FS=':' '{print $1,$2}' demo.txt #FS指定输入分隔符
hello world
linux redhat
along love
2.
awk -v FS=':' -v ORS='---' '{print $1,$2}' demo.txt
- 使用参数
-v FS=':'
,将输入字段分隔符(Field Separator)设置为冒号(:
)。 - 使用参数
-v ORS='---'
,将输出记录分隔符(Output Record Separator)设置为三个连续的短横线(---
)。 - 对于每一行数据,将该行的第一个字段和第二个字段打印出来,字段之间用空格分隔,行之间用三个短横线(
---
)分隔。
3.打印倒数第二个单词
awk -F: '{print $(NF-1)}' demo.txt
4.按行号打印出
awk '{print NR}' demo.txt
5.总共有几行
awk END'{print NR}' demo.txt
6.
awk '{print FNR}' demo.txt
-
{print FNR}
:这是操作部分,指定了要执行的动作。FNR
是一个内置变量,表示当前文件的相对行号(即从1开始递增的行号)。{print FNR}
表示打印当前文件的相对行号。 -
demo.txt
:这是输入文件的名称,awk
会逐行读取这个文件的内容并进行处理。它会从文件的第一行开始逐行打印出相对行号。
7.循环按行数打印文件名
awk '{print FILENAME}' demo.txt
8.
awk 'BEGIN {print ARGC}' demo.txt
-
'BEGIN {print ARGC}'
:这是一个特殊的部分,称为BEGIN
块,它在处理任何文件内容之前执行。在这个BEGIN
块中,我们使用内置变量ARGC
,它表示传递给awk
命令的参数个数。在这个例子中,awk
命令被传递了两个参数:命令本身和demo.txt
文件。 -
demo.txt
:这是输入文件的名称,但在BEGIN
块中,实际上还没有开始处理文件内容,所以这里的文件名并不会被用于处理文件。
9.
awk 'BEGIN {print ARGV[0]}' demo.txt
-
'BEGIN {print ARGV[0]}'
:这是一个特殊的部分,称为BEGIN
块,它在处理任何文件内容之前执行。在这个BEGIN
块中,我们使用内置数组变量ARGV
,它包含传递给awk
命令的所有参数。ARGV[0]
表示传递给awk
命令的第一个参数,即命令本身。 -
awkdemo
和awkdemo1
:这是命令行中传递给awk
命令的参数。在BEGIN
块中,实际上还没有开始处理文件内容,所以这里的文件名并不会被用于处理文件。