awk工具
2017-08-16 11:30
197 查看
一. awk工具介绍
1. 相比sed用来处理一行数据,awk比较倾向将一行分成几个“字段”来处理。
2. awk命令的格式
awk 'BEGIN{} {} END{}' filename
(1)awk可以处理文件也可以读取来自前个命令的标准输出
(2)awk主要是处理每一行的字段内的数据,默认的字段分割符是空格键或tab键
(3)awk中BEGIN和END两个是可选项,BEGIN一般是用来初始化一些变量在处理文件之前执行,中间{}是每读取一行的时候都会执行,END则是处理完文件之后再执行
3. awk处理一行中每个字段都是有名称的,$0表示的是整行数据,$1表示的是第一个字段值,$2表示的是第二个字段值.....
例如字符串"root 192.168.137.254 chenguolin chenguolin"有四个字段
$0 = "root 192.168.137.254 chenguolin chenguolin"
$1 = "root"
$2 = "192.168.137.254"
$3 = "chenguolin"
$4 = "chenguolin"
4. awk几个比较重要的内置变量
(1)NF: 每一行数据总的字段数
(2)NR: 当前awk所处理的第几行数据
(3)FS: 当前的分割符,默认是空格
(4)FILENAME: 当前awk处理文件的名字
二. awk的输出
1. awk提供了两种输出print和printf
2. print的参数可以是变量,数值,字符串等等,字符串要用双引号“”括起来。printf和C语言格式输出一样,在复杂的输出格式中可以用printf。
三.awk使用举例
假设有个文件in.txt,在awk内部可以和C语言一样格式使用。
1. 输出文件的每一行
awk '{print $0}' in.txt //print会自动换行
2. 输出每一行的第二个字段
awk '{print $2}' in.txt
3. 在打印文件之前,打印一行“output the file”
awk '{BEGIN{print "output the file"} {print $0}}' in.txt
4. 在打印完文件之后,打印一行“end of the file”
awk '{print $0} END{print "end of the file"}' in.txt
5. 如果每一行的第一个字段是“root”则打印
awk '{if($1 == "root") print $0}' in.txt
6. 打印奇数行
awk '{if(NR%2 == 1) print $0}' in.txt
7. 把两个文件中对应行合并,例如
第一个文件是 第二个文件是
root chenguolin
root lab104
则希望合并成
root chenguolin
root lab104
比awk好的命令: paste -d" " file1 file2 > file3
paste命令用来合并多个文件的行,默认是tab键分割符。
8. 打印文件in.txt中每一行的当前行数,总的字段数,第一个字段和最后一个字段
awk '{print NR,NF,$1,$NF}' in.txt
9. awk处理多个文件是顺序读取文件的
file1的内容
root
root
file2的内容
chenguolin
lab104
命令: awk '{print $0}' file1 file2 > file3
输出到file3中
root
root
chenguolin
lab104
四. awk 使用位运算
1. awk内部不能使用&,^等位运算,只能使用函数
2. and(v1, v2) // v1 和 v2做&运算
lshift(val,
count) // 左移count位
or(v1, v2) // 或运算
1. 相比sed用来处理一行数据,awk比较倾向将一行分成几个“字段”来处理。
2. awk命令的格式
awk 'BEGIN{} {} END{}' filename
(1)awk可以处理文件也可以读取来自前个命令的标准输出
(2)awk主要是处理每一行的字段内的数据,默认的字段分割符是空格键或tab键
(3)awk中BEGIN和END两个是可选项,BEGIN一般是用来初始化一些变量在处理文件之前执行,中间{}是每读取一行的时候都会执行,END则是处理完文件之后再执行
3. awk处理一行中每个字段都是有名称的,$0表示的是整行数据,$1表示的是第一个字段值,$2表示的是第二个字段值.....
例如字符串"root 192.168.137.254 chenguolin chenguolin"有四个字段
$0 = "root 192.168.137.254 chenguolin chenguolin"
$1 = "root"
$2 = "192.168.137.254"
$3 = "chenguolin"
$4 = "chenguolin"
4. awk几个比较重要的内置变量
(1)NF: 每一行数据总的字段数
(2)NR: 当前awk所处理的第几行数据
(3)FS: 当前的分割符,默认是空格
(4)FILENAME: 当前awk处理文件的名字
二. awk的输出
1. awk提供了两种输出print和printf
2. print的参数可以是变量,数值,字符串等等,字符串要用双引号“”括起来。printf和C语言格式输出一样,在复杂的输出格式中可以用printf。
三.awk使用举例
假设有个文件in.txt,在awk内部可以和C语言一样格式使用。
1. 输出文件的每一行
awk '{print $0}' in.txt //print会自动换行
2. 输出每一行的第二个字段
awk '{print $2}' in.txt
3. 在打印文件之前,打印一行“output the file”
awk '{BEGIN{print "output the file"} {print $0}}' in.txt
4. 在打印完文件之后,打印一行“end of the file”
awk '{print $0} END{print "end of the file"}' in.txt
5. 如果每一行的第一个字段是“root”则打印
awk '{if($1 == "root") print $0}' in.txt
6. 打印奇数行
awk '{if(NR%2 == 1) print $0}' in.txt
7. 把两个文件中对应行合并,例如
第一个文件是 第二个文件是
root chenguolin
root lab104
则希望合并成
root chenguolin
root lab104
比awk好的命令: paste -d" " file1 file2 > file3
paste命令用来合并多个文件的行,默认是tab键分割符。
8. 打印文件in.txt中每一行的当前行数,总的字段数,第一个字段和最后一个字段
awk '{print NR,NF,$1,$NF}' in.txt
9. awk处理多个文件是顺序读取文件的
file1的内容
root
root
file2的内容
chenguolin
lab104
命令: awk '{print $0}' file1 file2 > file3
输出到file3中
root
root
chenguolin
lab104
四. awk 使用位运算
1. awk内部不能使用&,^等位运算,只能使用函数
2. and(v1, v2) // v1 和 v2做&运算
lshift(val,
count) // 左移count位
or(v1, v2) // 或运算
相关文章推荐
- 【转载更新】Linux工具之AWK 2.基础知识
- linux运维实战练习及linux shell脚本、awk、sed工具命令学习总结
- awk工具
- sed工具以及awk工具的介绍及使用
- AWK 工具介绍
- 9.6-9.7 awk工具
- Linux/Unix工具与正则表达式的POSIX规范--awk使用中遇到的坑
- AWK工具简介
- sed,awk工具学习
- 样式扫描与处理工具命令awk
- 文本过滤工具之AWK
- Linux的文本处理工具浅谈-awk sed grep
- shell 知识点补充(3)-修改语系/特殊字符/ printf/sed 工具/awk 工具/diff/cmp
- 鸟哥书籍awk工具学习
- awk工具使用详解
- linux的awk工具介绍
- awk 数据处理工具
- 老段带你学AWK-Linux从业人员必备工具
- linux之数据处理工具-Awk的用法
- 优秀的样式扫描与处理工具-AWK