Linux三剑客:awk,sed,grep
如果你不会这三个命令,就别谈会Linux.
awk,sed都是linux下处理文本和文件的命令.还有一本书专讲这两个命令.《sed 与 awk》《awk》
基本上每个linux系统下都自带这三命令.
Linux之 awk 命令
awk是处理文本文件的一个应用程序,实际上awk还是一门脚本语言,但我们平时只用到awk命令.
awk的处理逻辑是依次扫描处理文本文件的每一行,每一列(字段).
我们经常使用它来处理大量的日志文件,csv文件.
下面只讲,命令方法.
假如我们有这样一段csv文件.会员列表吧.
[user.csv]1
2
3
4
51001,阿金,13800013801,user001@163.com
1002,阿木,13800013802,user002@163.com
1003,阿水,13800013803,user003@163.com
1004,阿火,13800013804,user004@163.com
1005,阿土,13800013805,user004@163.com
基本语法:1
awk 参数 动作 文件名
逐行打印
1 | awk '{print}' user.csv |
解释:
{print} 为动作 print命令 为打印显示
print命令默认尾部会加换行.
可以使用printf 命令不会加换行.
显示指定列
如:姓名,手机号1
awk -F ',' '{print $2,$3}' user.csv
效果如下:
解释:
‘-F’: 代表 列(字段)分割符,默认使用空白符 (空格或Tab)
‘\$2’: 表示 第2个字段,即是第2列
‘\$3’: 表示 第3个字段$0
:表示整行.
‘,’: 逗号表示,空格
除了这些,还有很多内置的变量,和方法,参考awk官方文档.
如:NR代表行号.1
awk -F ',' '{print NR".手机号是:"$3}' user.csv
双引号是字符串.
这样就可以生成,一些脚本,如PHP,bash批量发送短信脚本.
变量和运算
awk可以用变量和运算结果echo "" | awk '{a=1+2;print a;}'
解释:
awk脚本使用 ;
作来代码分隔符.
处理函数
内置很多处理函数,如大小写转换,切割截取文本,正则,数学处理,随机数等等.
详细参考官方文档.
《内置函数文档》
如把substr(string,start,length)注意字符集,中文utf8按3个字节.1
awk -F ',' '{print substr($2,4,3)}' user.csv
条件输出
基础语法,动作为空时,默认print输出awk '条件语句 {动作}'
比如第1表用户ID,大于1002的1
awk -F ',' '$1>1002 && $1<1005' user.csv
说明:
条件符如: <,>,=,>=,<=,!不等于,&&合,|| 或等.
例:从第2行开始1
awk -F ',' 'NR>1 {print $2,$3}' user.csv
也可以支持正则.
例,查找包含”阿金”的行:1
awk -F ',' '/阿金/ {print $2,$3}' user.csv
IF语句
复杂的条件,可以使用if条件.
可以使用if() ;else
例:只输出偶数行.1
awk -F ',' '{if($1%2 ==0)print $2;}' user.csv
例:使用else if ,else1
awk -F ',' '{if($1%2 ==0)print $2;else if($1==1001) print "第1行";else print "--"}'
BEGIN和END
基本语法BEGIN{读取前前执行} 条件 {动作} END{最后退出前}
可以单独使用,注意大写.
例,BEGIN1
awk -F ',' 'BEGIN {print "我们要开始遍历行了:"} {print $0}' user.csv
例:END
一般用于统计结果,如求ID的总和.
稍微复杂的经典案例:
计算目录下的文本总大小.
需要个知识:ls -l 目录
: 显示目录的文件列表|
: 管道符,把前面的结果传给后面命令
例:计算当前目录下,.gz文件的总大小1
ls -l ./ | awk '/.gz$/ {size+=$5} END {print "大小为:" size}'
PS,查看文件和目录大小有专用的命令.du -sk 目录或文件
如du -skh ./*.gz
h:友好显示大小
k: Kb
m: Mb
上面求大小可以改成.1
du -sk ./*.gz | awk '{size+=$1;} END{print size}'
独立脚本运行
awk是一个脚本语言,类似python,JS一样.
由于是很多linux系统自带,所以流行度很高.
脚本演示.
awk -f 脚本 处理文件
1
awk -f user.awk user.csv
例: 处理成json
1 | #!/bin/awk |
解释:FS
: 修改字段分隔符RS
: 修改行分隔符,默认\n>>
: 重定向到文件
本文作者:阿金
本文链接:http://www.hi-arkin.com/2019/04/20/Linux/awk/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
扫描二维码,分享此文章