Linux awk使用方法~~整理

  关于awk的视频教程,强烈推荐观看B站大神录制的:awk入门教程

测试数据(一个学生信息表)

小红 女 一年级 北京 优秀
小花 女 一年级 上海 差
小明 男 三年级 北京 优秀
小可 女 一年级 重庆 良好
小林 男 一年级 重庆 优秀
小飞 男 二年级 广东 一般
小波 男 一年级 杭州 优秀
小康 男 四年级 深圳 一般
小雷 男 一年级 福建 良好
小冰 女 五年级 北京 优秀

  

原样打印内容

→ ~ $ awk '{print}' data.txt
小红 女 一年级 北京 优秀
小花 女 一年级 上海 差
小明 男 三年级 北京 优秀
小可 女 一年级 重庆 良好
小林 男 一年级 重庆 优秀
小飞 男 二年级 广东 一般
小波 男 一年级 杭州 优秀
小康 男 四年级 深圳 一般
小雷 男 一年级 福建 良好
小冰 女 五年级 北京 优秀

  

打印第一列

→ ~ $ awk '{print $1}' data.txt
小红
小花
小明
小可
小林
小飞
小波
小康
小雷
小冰

  

打印第二列和第四列

→ ~ $ awk '{print $2,$4}' data.txt
女 北京
女 上海
男 北京
女 重庆
男 重庆
男 广东
男 杭州
男 深圳
男 福建
女 北京

  注意$0表示一整行的所有列

 

打印多列,并指定中间连接符号

  就是在打印的地方加连接符号就行,每一列的$n 中间的符号要使用双引号阔以来。

  awk中,分隔符(或者一些字符串内容)可以和列中间,可以使用逗号分隔,此时,真实的作用效果是空格。也可以使用空格分隔,但此时的作用效果是连接(中间没有空格)

→ ~ $ awk '{print $2,"-",$4,"->",$5}' data.txt #因为使用的是逗号分隔,所有中间分隔符两边都有空格
女 - 北京 -> 优秀
女 - 上海 -> 差
男 - 北京 -> 优秀
女 - 重庆 -> 良好
男 - 重庆 -> 优秀
男 - 广东 -> 一般
男 - 杭州 -> 优秀
男 - 深圳 -> 一般
男 - 福建 -> 良好
女 - 北京 -> 优秀
→ ~ $ awk '{print $2 "-" $4 "\t" $5}' data.txt #因为使用空格分隔,被认为是连接操作,所以,结果中的连接符两边没有空格
女-北京	优秀
女-上海	差
男-北京	优秀
女-重庆	良好
男-重庆	优秀
男-广东	一般
男-杭州	优秀
男-深圳	一般
男-福建	良好
女-北京	优秀

  

NR显示行号

  NR number of rows(result)

→ ~ $ awk '{print NR,$2,$4,$5}' data.txt
1 女 北京 优秀
2 女 上海 差
3 男 北京 优秀
4 女 重庆 良好
5 男 重庆 优秀
6 男 广东 一般
7 男 杭州 优秀
8 男 深圳 一般
9 男 福建 良好
10 女 北京 优秀

  

NF显示列数

  number Of fields

→ ~ $ awk '{print NF,$0}' data.txt
5 小红 女 一年级 北京 优秀
5 小花 女 一年级 上海 差
5 小明 男 三年级 北京 优秀
5 小可 女 一年级 重庆 良好
5 小林 男 一年级 重庆 优秀
5 小飞 男 二年级 广东 一般
5 小波 男 一年级 杭州 优秀
5 小康 男 四年级 深圳 一般
5 小雷 男 一年级 福建 良好
5 小冰 女 五年级 北京 优秀

  因为awk中默认使用空格分割列,所以当咱们认为的一列会被awk认为是多列,比如地点:北京 海淀 西二旗,我们通常认为他是一列,但是awk会认为是3列。

查找数据

  查找第四列值为北京的记录。注意awk使用空格分割,所以比较之前,先确定比较的列是否正确。

→ ~ $ awk '$4=="北京"{ print $0}' data.txt  #北京要使用双引号括起来,否则会被认为是变量
小红 女 一年级 北京 优秀
小明 男 三年级 北京 优秀
小冰 女 五年级 北京 优秀
→ ~ $ awk '$4=="北京" && $2=="男"{ print $0}' data.txt  #并列关系
小明 男 三年级 北京 优秀
→ ~ $ awk '$4=="北京" || $2=="男"{ print $0}' data.txt    #或关系
小红 女 一年级 北京 优秀
小明 男 三年级 北京 优秀
小林 男 一年级 重庆 优秀
小飞 男 二年级 广东 一般
小波 男 一年级 杭州 优秀
小康 男 四年级 深圳 一般
小雷 男 一年级 福建 良好
小冰 女 五年级 北京 优秀

  

猜你喜欢

转载自www.cnblogs.com/-beyond/p/9254007.html