首先, 你需要先了解awk 的工作原理:1。AWK读取输入文件一次一行。 2。对于每一行,它匹配在给定的顺序模式,如果匹配,执行相应的动作。 3。如果没有模式匹配,将执行任何行动。 4。在上面的语法,无论是搜索模式,或行动是可选的,但不能同时。 5。如果没有给出搜索模式,然后awk要执行每一行输入给定的行动。 6。如果没有给出动作,打印,这是默认的操作与模式相匹配的所有行。 7。空出的任何行动括号什么都不做。它不会执行默认的打印操作。 8。中的每个行动的声明应该用分号分隔。让我们创建employee.txt文件,其中有
首先, 你需要先了解awk 的工作原理:
1。AWK读取输入文件一次一行。
2。对于每一行,它匹配在给定的顺序模式,如果匹配,执行相应的动作。
3。如果没有模式匹配,将执行任何行动。
4。在上面的语法,无论是搜索模式,或行动是可选的,但不能同时。
5。如果没有给出搜索模式,然后awk要执行每一行输入给定的行动。
6。如果没有给出动作,打印,这是默认的操作与模式相匹配的所有行。
7。空出的任何行动括号什么都不做。它不会执行默认的打印操作。
8。中的每个行动的声明应该用分号分隔。
让我们创建employee.txt文件,其中有以下内容,这将是在使用
下文提到的例子。
5,000
200 Jason Developer Technology 7,000
400 Nisha Manager Marketing 6,000
Awk的范例1。 awk的默认行为
默认情况下的awk打印文件的每一行。
1234567
5,000
200 Jason Developer Technology 7,000
400 Nisha Manager Marketing 6,000
在上面的例子中模式中没有给出。因此,是适用于所有的行。
action与任何参数的打印输出默认情况下,输出整行.
Awk的范例2。打印与模式匹配的行。
1234$ awk ‘/Thomas/
/Nisha/’ employee.txt
100 Thomas Manager Sales $5,000
400 Nisha Manager Marketing $9,500
在上面的例子,它打印的“Thomas”或“Nisha”匹配的所有行。它有两种模式。
Awk的范例3。只打印特定的字段。
awk有内置的变量。对于每一个记录,即行,分隔空白字符分隔记录默认情况下,它存储在 1, 3和0表示整行。 NF是一个内置变量,它代表这一行有多少个被分隔的域.
123456789101112135,000
Jason 7,000
Nisha 6,000
5,000
Jason 7,000
Nisha 6,000
Awk 范例4. 初始化and Final Action
Awk 两个重要的pattern , 由关键词 BEGIN and END 标识
Syntax:
BEGIN { Actions}
{ACTION} # Action for everyline in a file
END { Actions }
is for comments in Awk
这是一个例子
12345678910111213
$ awk ‘BEGIN {print “Name\tDesignation\tDepartment\tSalary”;}
{print 3,”\t”,NF;}
END{print “Report Generated\n————–”;
}’ employee.txtName Designation Department Salary
Thomas Manager Sales $5,000
Jason Developer Technology $5,500
Sanjay Sysadmin Technology $7,000
Nisha Manager Marketing $9,500
Randy DBA Technology $6,000
Report Generated
在上面的例子,它打印出的报告和最后文件的标题
Awk的范例6。打印技术部门的雇员列表。
部门名称现在是第四个字段,所以需要检查与“Techology”的字符串,如果 awk '5,500
300 Sanjay Sysadmin Technology 6,000
操作符〜是正则表达式比较。如果匹配的默认操作,即打印整行.
Awk的范例7。打印在技术部门的雇员人数
下面的例子, 检查 department 是否是Technology, 如果是 则Action中,只增加变量的计数. 这个变量在BEGIN 中被初始化为0
123456
4 ~ /Technology/ { count++; }
END { print “Number of employees in Technology Dept =”,count;}’ employee.txt
Number of employees in Tehcnology Dept = 3
在END 中打印出这个变量,就是Technology 部门的员工数目
上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行
下:j nj:向下移动n行
左:h nh:向左移动n列
右:l nl:向右移动n列
个人觉得这个四个快捷键可以用上下左右箭头代替,可能是因为习惯了,如果上下移动多行可以使用 page on/up 来替代。
w:光标以单词向前移动 nw:光标向前移动n个单词 光标到单词的第一个字母上
b:与w相反
e: 光标以单词向前移动 ne:光标向前移动n个单词 光标到单词的最后一个字母上
ge:与e相反
如果担心记不清,可是先记住其中的一对,比如w和b,操作也快。
$:移动光标到行尾
^:移动光标到行首第一个非空字符上去