shell 中的awk(最后夹杂一些光标移动小知识)

这里写图片描述首先, 你需要先了解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文件,其中有以下内容,这将是在使用
下文提到的例子。

catemployee.txt100ThomasManagerSalescatemployee.txt100ThomasManagerSales5,000
200 Jason Developer Technology 5,500300SanjaySysadminTechnology5,500300SanjaySysadminTechnology7,000
400 Nisha Manager Marketing 9,500500RandyDBATechnology9,500500RandyDBATechnology6,000

Awk的范例1。 awk的默认行为

默认情况下的awk打印文件的每一行。

1234567
awkprint;employee.txt100ThomasManagerSalesawk‘print;′employee.txt100ThomasManagerSales5,000
200 Jason Developer Technology 5,500300SanjaySysadminTechnology5,500300SanjaySysadminTechnology7,000
400 Nisha Manager Marketing 9,500500RandyDBATechnology9,500500RandyDBATechnology6,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有内置的变量。对于每一个记录,即行,分隔空白字符分隔记录默认情况下,它存储在n4n个变量。如果该行有4个词,它会被存储在 1,22, 3和44。0表示整行。 NF是一个内置变量,它代表这一行有多少个被分隔的域.

12345678910111213awkprint$2,$5;employee.txtThomasawk′print$2,$5;′employee.txtThomas5,000
Jason 5,500Sanjay5,500Sanjay7,000
Nisha 9,500Randy9,500Randy6,000

awkprint$2,$NF;employee.txtThomasawk′print$2,$NF;′employee.txtThomas5,000
Jason 5,500Sanjay5,500Sanjay7,000
Nisha 9,500Randy9,500Randy6,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 2,"\t",2,"\t",3,”\t”,4,"\t",4,"\t",NF;}
END{print “Report Generated\n————–”;
}’ employee.txt

Name 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”的字符串,如果44匹配,则打印这一行 awk '4 /Technology/employee.txt200JasonDeveloperTechnology4 /Technology/′employee.txt200JasonDeveloperTechnology5,500
300 Sanjay Sysadmin Technology 7,000500RandyDBATechnology7,000500RandyDBATechnology6,000

操作符〜是正则表达式比较。如果匹配的默认操作,即打印整行.

Awk的范例7。打印在技术部门的雇员人数
下面的例子, 检查 department 是否是Technology, 如果是 则Action中,只增加变量的计数. 这个变量在BEGIN 中被初始化为0

123456
awkBEGINcount=0;awk‘BEGINcount=0;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,操作也快。

$:移动光标到行尾
^:移动光标到行首第一个非空字符上去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值