我是靠谱客的博主 搞怪砖头,最近开发中收集的这篇文章主要介绍通过几个案例讲解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来连接上后面的字符串。

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

最后,希望大家可以认真去学习下这个命令,如果掌握了awk,就可以做出很多有意思的事情哦!

以上就是通过几个案例讲解linux下的awk命令的详细内容,更多请关注靠谱客其它相关文章!

最后

以上就是搞怪砖头为你收集整理的通过几个案例讲解linux下的awk命令的全部内容,希望文章能够帮你解决通过几个案例讲解linux下的awk命令所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部