linux_awk(一)
来源:互联网 发布:数据分析师证书考试 编辑:程序博客网 时间:2024/06/05 20:20
综述
是linux的shell三剑客之一:
- grep 查找
- sed 编辑
- awk 数据分析
awk本身也是一门语言,是linxu中处理字符文本的强大工具,结合sed,grep能产生强大的效果。
每个程序都是一个或多个模式动作序列。每个模式一次匹配文本的每一行。直到输入完毕。
都是用
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。灵活性是awk最大的优势。
后续的演示和学习都用下面的例子进行,分别是awk1.txt和awk2.txt
// example1 awk1.txtProto Recv-Q Send-Q Local-Address Foreign-Address Statetcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTENtcp 0 0 0.0.0.0:80 0.0.0.0:* LISTENtcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTENtcp 0 0 coolshell.cn:80 124.205.5.146:18245 TIME_WAITtcp 0 0 coolshell.cn:80 61.140.101.185:37538 FIN_WAIT2tcp 0 0 coolshell.cn:80 110.194.134.189:1032 ESTABLISHEDtcp 0 0 coolshell.cn:80 123.169.124.111:49809 ESTABLISHEDtcp 0 0 coolshell.cn:80 116.234.127.77:11502 FIN_WAIT2tcp 0 0 coolshell.cn:80 123.169.124.111:49829 ESTABLISHEDtcp 0 0 coolshell.cn:80 183.60.215.36:36970 TIME_WAITtcp 0 4166 coolshell.cn:80 61.148.242.38:30901 ESTABLISHEDtcp 0 1 coolshell.cn:80 124.152.181.209:26825 FIN_WAIT1tcp 0 0 coolshell.cn:80 110.194.134.189:4796 ESTABLISHEDtcp 0 0 coolshell.cn:80 183.60.212.163:51082 TIME_WAITtcp 0 1 coolshell.cn:80 208.115.113.92:50601 LAST_ACKtcp 0 0 coolshell.cn:80 123.169.124.111:49840 ESTABLISHEDtcp 0 0 coolshell.cn:80 117.136.20.85:50025 FIN_WAIT2tcp 0 0 :::22 :::* LISTEN// example2 awk2.txtBeth 4.00 0Dan 3.75 0Kathy 4.00 10Mark 5.00 20Mary 5.50 22Susie 4.25 18
语法
使用 模式-动作 语句
ex:
awk ' $3 > 0 {print $1 $2 $3} {FS= " "} ' awk1.txt
- awk 指明使用的是awk程序
- awk1.txt 对awk1.txt文本进行操作
- ‘xxxx’ 模式动作模块
- $3 > 0模式。利用该模式扫一遍所有的行。
- {print xxx} 动作。对符合条件的进行动作。
- {FS} 指定内建变量
主要分成四部分:
- awk命令
- 操作的文本:可以有多个
- 模式:可以没有
- 动作:放在{}里
模式-动作部分被’ ‘单引号包围,可以方便的放在shell中使用。
在awk中可以指定分隔符(默认是空格)
// 指定singla为默认分隔符awk -F singal {xx}
模式
用来选择符合要求的行。也可以没有模式,只有动作。
通过列来选择行。
// 选择第三列值>3的所有行$3>0 // 选择所有内容 $0// == 选择指定内容的$1 = "Mark"// 使用与或非等逻辑运算$1 == "Mark" || $1 == "Mary"!($3>0)
动作
在print中可以进行数据运算,添加打印内容,添加空格等操作
// 打印所有内容print $0// 打印第n列print $n// 打印字段的个数(number of field)print NF> print NF $1> 3xxxx// 打印最后一个字段print $(NF-1)// 打印行号(number of row)print NR $0> print NR $1> 1 xx// 输出排序后的内容print $2 | sort -n
ifelse
if(exp)
sentence1
else
sentence2
循环
while
while(exp)
{sentence}for
for(var in seq){
sentence
}- do
do {sentence}
while (condition)
运算符
><==>=!=||&&~~!
内建变量
$0 所有内容$N 第N列FS 输入字段(列)分隔符。指定输入字段的分隔符NF 当前字段的个数(列数)NR 添加行号FNR 每个文件各自的行号RS 输入的记录(行)分隔符OFS 输出字段分隔符ORS输出记录分隔符
文件操作
awk 'NR!=1 {print $n> "输出文件名"}' file
IO
- next
如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。next语句一般用于多行合并:
// 遇到行号是偶数就跳过awk 'NR/2 == 1{next}{print NR,$0} ' awk1.txt
- getLine
1行读取成功:返回1
到文件末尾:返回0
异常:返回-1
// 获取时间并输出awk 'BEGIN{'date' | getline out;print out}' test
- close
关闭文件
0 0
- linux_awk(一)
- Linux_awk命令
- linux_awk(二)
- 一
- 《一》
- 一
- 一
- 一...
- 一
- 一
- (一)
- 一
- 一。
- (一)
- 一
- 一
- 一
- 一
- android短信上送验证的实现及问题
- 【Java工具类】----正则表达式校验工具类
- 笔记——JSP(杂)
- linux_grepbak
- 深入理解java虚拟机读书笔记(一): jvm的分类
- linux_awk(一)
- linux_awk(二)
- IDEA 安装 mybatis-plugin并破解
- N!的k进制位数 【打表】【斯特林公式变形】
- Centos7下安装apache过程总结
- C# udp小程序
- RecycleView简单实现滑动删除Item
- 特征值和特征向量(二)
- 栈及其实现