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.txt100ThomasManagerSales c a t e m p l o y e e . t x t 100 T h o m a s M a n a g e r S a l e s 5,000
200 Jason Developer Technology 5,500300SanjaySysadminTechnology 5 , 500 300 S a n j a y S y s a d m i n T e c h n o l o g y 7,000
400 Nisha Manager Marketing 9,500500RandyDBATechnology 9 , 500 500 R a n d y D B A T e c h n o l o g y 6,000

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

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

1234567
awkprint;employee.txt100ThomasManagerSales a w k ‘ p r i n t ; ′ e m p l o y e e . t x t 100 T h o m a s M a n a g e r S a l e s 5,000
200 Jason Developer Technology 5,500300SanjaySysadminTechnology 5 , 500 300 S a n j a y S y s a d m i n T e c h n o l o g y 7,000
400 Nisha Manager Marketing 9,500500RandyDBATechnology 9 , 500 500 R a n d y D B A T e c h n o l o g y 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有内置的变量。对于每一个记录,即行,分隔空白字符分隔记录默认情况下,它存储在 n4 n 个 变 量 。 如 果 该 行 有 4 个 词 , 它 会 被 存 储 在 1, 2 2 , 3和 4 4 。 0表示整行。 NF是一个内置变量,它代表这一行有多少个被分隔的域.

12345678910111213 awkprint$2,$5;employee.txtThomas a w k ′ p r i n t $ 2 , $ 5 ; ′ e m p l o y e e . t x t T h o m a s 5,000
Jason 5,500Sanjay 5 , 500 S a n j a y 7,000
Nisha 9,500Randy 9 , 500 R a n d y 6,000

awkprint$2,$NF;employee.txtThomas a w k ′ p r i n t $ 2 , $ N F ; ′ e m p l o y e e . t x t T h o m a s 5,000
Jason 5,500Sanjay 5 , 500 S a n j a y 7,000
Nisha 9,500Randy 9 , 500 R a n d y 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 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”的字符串,如果 4 4 匹 配 , 则 打 印 这 一 行 awk ' 4 /Technology/employee.txt200JasonDeveloperTechnology 4   / T e c h n o l o g y / ′ e m p l o y e e . t x t 200 J a s o n D e v e l o p e r T e c h n o l o g y 5,500
300 Sanjay Sysadmin Technology 7,000500RandyDBATechnology 7 , 000 500 R a n d y D B A T e c h n o l o g y 6,000

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

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

123456
awkBEGINcount=0; a w k ‘ B E G I N c o u n t = 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、付费专栏及课程。

余额充值