< 返回新闻公共列表

通过几个案例讲解linux下的awk命令

发布时间:2020-09-24
通过几个案例讲解linux下的awk命令

shell编程三剑客里,awk比另外两个命令grep、sed更加复杂,更加难以掌握,因为awk是可以作为一个编程语言的!难归难,但该命令是必须要掌握的命令,因为它的功能实在太强大了!

awk基本结构如下:

awk [选项] 'pattern1 {action1} patten2 {action2} ……' filename

单引号是为了和shell命令区分开来。

大括号表示一个命令分组。可以是一个动作,或多个动作,如果是多个动作,则动作之间需要加上;或输入enter键

pattern是模式,表示匹配到的行才进行action。模式可以是正则,或算术表达式等

pattern和action可以只有其一,但不能两者都没有

awk常用的选项如下:

-F:指定分割符,分割符可以是字符也可以是一个正则表达式

-v val=value,定义一个变量并赋值

下面,我来通过一个应用来讲解awk命令的使用。下面是一个文本文件的部分内容

# head city.txt

北京 BEIJING BJ



上海 SHANGHAI SH



天津 TIANJIN TJ



重庆 CHONGQING ZQ



阿克苏 AKESU AKS



……

现在的需求是,获取每个城市的全拼,然后转换为小写形式再连接上hellowx.com。其他的信息全部给过滤掉。

# awk 'NR%2==0{next}{print}' city.txt | head -n 10

北京 BEIJING BJ

上海 SHANGHAI SH

天津 TIANJIN TJ

重庆 CHONGQING ZQ

阿克苏 AKESU AKS

安宁 ANNING AN

安庆 ANQING AQ

鞍山 ANSHAN AS

安顺 ANSHUN AS

安阳 ANYANG AY

我们注意到,偶数行都是空白行。所以只要过滤偶数行就行了。这样过滤掉了空白行。注意上面的NR表示当前行号,意思是偶数行全部过滤掉。next表示忽略当前行。

接下就需要过滤第一和第三字段。

# awk 'NR%2==0{next}{print $2}' city.txt | head -n 10

BEIJING

SHANGHAI

TIANJIN

CHONGQING

AKESU

ANNING

ANQING

ANSHAN

ANSHUN

ANYANG

上面的$2表示第二个字段,结合print表示只打印第二个字段。最后就是转换和连接的工作了,就需要使用tr命令了。

# awk 'NR%2==0{next}{print $2}' city.txt | head -n 10 | tr [A-Z] [a-z] | awk '{print $1"hellowx.com"}'

beijinghellowx.com

shanghaihellowx.com

tianjinhellowx.com

chongqinghellowx.com

akesuhellowx.com

anninghellowx.com

anqinghellowx.com

anshanhellowx.com

anshunhellowx.com

anyanghellowx.com

tr命令是用来作转换的,将全部大写转换我小写,然后再用awk来连接上后面的字符串。

对上面涉及的几个命令,如果不是太熟悉可能不是那么容易理解。建议,可以一步一步的来。熟悉了第一步而,然后再去理解第二部。


以上文章部分内容采集于网络,如有侵权请联系未来云客服处理,谢谢!


/../template/Home/mama/PC/Static