awk命令学习
转自:https://www.runoob.com/linux/linux-comm-awk.html,https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
1.awk命令
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
# log.txt
2 this is a test
3 Do you like awk
This's a test
10 There are orange,apple,mongo
awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号
- pattern 表示 AWK 在数据中查找的内容, 就是要表示的正则表达式,用斜杠括起来。
- action 是在找到匹配内容时所执行的一系列命令。
检索:
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt #这里的逗号似乎没什么特别含义,用" "出来的结果也是一样的。
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
看起来功能有点像python中的pandas包?
2.通过命令行调用
awk [-F field-separator] 'commands' input-file(s)
commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
例子,只是显示/etc/passwd的账户 ,格式内容如下:
#cat /etc/passwd |awk -F ':' '{print $1}' root daemon bin sys
也可以结合管道和grep命令一起使用:
grep "21:52:" 14.log |grep "Url" |awk -F '.' '{print $1}'
以.作为分割符。
其他例子,从日志系统导出的文件,
cat aaa|awk '{print $9}'|grep -o '[0-9]*'|uniq -c|sort -n -r|head -n 10