linux shell学习之awk ---新手笔记
2015-05-04 20:51
190 查看
1.AWK的pattern
BEGIN
END
expression 例: NF>10 或/^a/
/regular expression/?
可以⽤用类似/^a/这种写法
另一种写法$1 ~ /^a/ //字段匹配
表达式之间可以⽤用&& || ! ?: 等操作符做布尔运算(当然可以是正则表达式)
expression , expression 表⽰示开始和结束 例: NF==5,NF==10
例子1: cat /etc/passwd |awk -F":" 'NR==5,NR==10{print NR,$1}' //只显示passwd文件的第5-10行,并定义字段分隔用:号
5 sync
6 games
7 man
8 lp
9 mail
10 news
知识点:1.-F参数。2.expression , expression的用法。
2.AWK的action
完善的编程语⾔言⽀支持变量赋值、数组、判断、循环、⾃自定义函数
有很⽅方便的预定义的变量和函数
最常⽤用的是print函数
字段取值$1、$2、$3……$NF
$0就是文件的所有行
注意:awk的定义变量不是一定非得$符号开头,$符号是取字段值。
例子2:awk 'BEGIN{RS="[^0-9a-zA-Z]"};{count[$0]++};END{for (i in count) print i,count[i]}'<1.txt
iwant 1
chinawelcome 1
ilove 1
to 7
china 4
love 4
changsha 5
i 4
beijing 2
welcome 5
you 5
注:语句作用:将文件的每一个单词提取出单独成行,并统计单词出现的次数。
知识点:1.BEGIN,END块的写法和使用({}括起来,;来隔开)。2.分隔符RS和FS的区别(RS:遇到RS即另开一行)。3.数组的使用。4.for循环。5.文件重定向输入
例子3 对上面例子进行扩展(排序并写入新文件)
awk 'BEGIN{RS="[^0-9a-zA-Z]"};{count[$0]++};END{for (i in count) print i,count[i] | "sort -r -k2 -o 3.txt" }'<1.txt
知识点:1.print用法。print … | command : 运⾏command命令并将print的输出作为command的输⼊。注意整个command包括参数所有部分都在双引号内
2. sort用法。-o参数将排序结果写入文件,而此重定向文法完成。
3. getline的用法
例子:将文件合并起来。
vi join.awk
#!/usr/bin/awk -f
{
getline sl<ARGV[2]
print $0 sl
}
执行:awk -f join.awk file1 file2
BEGIN
END
expression 例: NF>10 或/^a/
/regular expression/?
可以⽤用类似/^a/这种写法
另一种写法$1 ~ /^a/ //字段匹配
表达式之间可以⽤用&& || ! ?: 等操作符做布尔运算(当然可以是正则表达式)
expression , expression 表⽰示开始和结束 例: NF==5,NF==10
例子1: cat /etc/passwd |awk -F":" 'NR==5,NR==10{print NR,$1}' //只显示passwd文件的第5-10行,并定义字段分隔用:号
5 sync
6 games
7 man
8 lp
9 mail
10 news
知识点:1.-F参数。2.expression , expression的用法。
2.AWK的action
完善的编程语⾔言⽀支持变量赋值、数组、判断、循环、⾃自定义函数
有很⽅方便的预定义的变量和函数
最常⽤用的是print函数
字段取值$1、$2、$3……$NF
$0就是文件的所有行
注意:awk的定义变量不是一定非得$符号开头,$符号是取字段值。
例子2:awk 'BEGIN{RS="[^0-9a-zA-Z]"};{count[$0]++};END{for (i in count) print i,count[i]}'<1.txt
iwant 1
chinawelcome 1
ilove 1
to 7
china 4
love 4
changsha 5
i 4
beijing 2
welcome 5
you 5
注:语句作用:将文件的每一个单词提取出单独成行,并统计单词出现的次数。
知识点:1.BEGIN,END块的写法和使用({}括起来,;来隔开)。2.分隔符RS和FS的区别(RS:遇到RS即另开一行)。3.数组的使用。4.for循环。5.文件重定向输入
例子3 对上面例子进行扩展(排序并写入新文件)
awk 'BEGIN{RS="[^0-9a-zA-Z]"};{count[$0]++};END{for (i in count) print i,count[i] | "sort -r -k2 -o 3.txt" }'<1.txt
知识点:1.print用法。print … | command : 运⾏command命令并将print的输出作为command的输⼊。注意整个command包括参数所有部分都在双引号内
2. sort用法。-o参数将排序结果写入文件,而此重定向文法完成。
3. getline的用法
例子:将文件合并起来。
vi join.awk
#!/usr/bin/awk -f
{
getline sl<ARGV[2]
print $0 sl
}
执行:awk -f join.awk file1 file2
相关文章推荐
- linux shell学习之bash解析次序 --新手笔记
- SED,AWK学习笔记Part 1-----利用正则表达式进行文本匹配
- 学习笔记(十一)——Linux Shell 基础知识
- linux shell脚本学习笔记一
- linux Shell学习笔记最后一节,温故与知新
- shell脚本学习笔记(三)—— if、xargs、awk
- Awk 命令学习总结、AWk命令系列学习(linux shell)
- linux shell学习笔记(一)shell简介
- Linux Shell学习笔记三
- Linux shell 脚本攻略学习笔记5
- 有关Linux Shell的学习笔记
- Linux Shell学习笔记四
- 【Shell】【学习笔记】Linux Shell脚本应用(七)
- JavaScript新手学习笔记3——三种排序方式
- Linux Shell学习笔记五
- 新手上路,Kotlin学习笔记(二)---方法(函数)部分
- Awk学习笔记
- Shell脚本学习笔记(七)--sed和awk
- linux shell学习笔记1(特殊符号)
- [Android新手学习笔记22]-如何自定义控件