linux中awk学习小结
2015-02-17 16:21
190 查看
awk与sed本身都是一个完整的编程语言,可以用来方便的处理文本,awk处理列。
awk正常的结构: cat tmp.txt | awk 'BEGIN{}{}END{}' --带有表头,带有中间的处理过程,带有结尾--
常用用法:cat tmp.txt|awk '{print $1}' --tmp.txt中字段已空格分隔,$0显示整行,$1表示第一个域,$NF最后一个,$NF-1倒数第二个域,默认的分隔符是空格--
1、域分隔符是:
cat /etc/passwd|awk -F':' '{print $1,$NF}' --命令行模式下,-F参数可修改输入的分隔符,即处理文件时的分隔符,该命令为以:分隔passwd文件,打印第一个域和最后一个域,输出字符默认已空格分隔--
cat /etc/passwd|awk -F':' '{print $1$NF}' --输出第一个域和最后一个域,之间无空格,--
cat /etc/passwd|awk -F':' '{print $1“____”$NF}'--输出第一个域和最后一个域,之间分隔为____,-- 2、匹配行打印域
例文件tmp.txt:
11 aa 666
22 bb 777
33 cc 888
命令:
cat tmp.txt|awk '/bb/{print $0}' 结果:22 bb 777 --内容匹配到bb的行打印--
cat tmp.txt|awk '/bb/{print $3}' 结果:777 --内容匹配到bb的行,打印第三个域,默认分隔符为空格--
cat tmp.txt|awk '$2~/b/' {print $3}结果:777 --第二个域可以匹配b的行,打印第三个域,注意有空格--
可以减少一次grep对文件的查找
3、判断打印
cat /etc/passwd|awk -F':' '{if($1=="bill")print}' --第一个域等于字符串bill,打印--
4、数组
例文件
search 111
search 222
cm 333
search 444
命令:
cat tmp.txt |awk '{a[$1]++}END{for(i in a)print i,a[i]}'
结果:
cm 1
search 3
a[$1]为一个数据,a[$1]++记录不同数据出现次数5、awk匹配到指定的字符串并打印该字符串所在的域(列数)
格式:
awk '/行匹配串/ {for(i=1;i<=NF;i++) if($i ~ /字符串/) print $i i}' $filename
awk '/行匹配串/ {for(i=1;i<=NF;i++) if($i ~ /(字符串1|…|字符串n)/) print $i i}' $filename
例:
awk '/is/{for(i=1;i<=NF;i++) if($i ~ /is/) print $i i}' try.pl
awk正常的结构: cat tmp.txt | awk 'BEGIN{}{}END{}' --带有表头,带有中间的处理过程,带有结尾--
常用用法:cat tmp.txt|awk '{print $1}' --tmp.txt中字段已空格分隔,$0显示整行,$1表示第一个域,$NF最后一个,$NF-1倒数第二个域,默认的分隔符是空格--
1、域分隔符是:
cat /etc/passwd|awk -F':' '{print $1,$NF}' --命令行模式下,-F参数可修改输入的分隔符,即处理文件时的分隔符,该命令为以:分隔passwd文件,打印第一个域和最后一个域,输出字符默认已空格分隔--
cat /etc/passwd|awk -F':' '{print $1$NF}' --输出第一个域和最后一个域,之间无空格,--
cat /etc/passwd|awk -F':' '{print $1“____”$NF}'--输出第一个域和最后一个域,之间分隔为____,-- 2、匹配行打印域
例文件tmp.txt:
11 aa 666
22 bb 777
33 cc 888
命令:
cat tmp.txt|awk '/bb/{print $0}' 结果:22 bb 777 --内容匹配到bb的行打印--
cat tmp.txt|awk '/bb/{print $3}' 结果:777 --内容匹配到bb的行,打印第三个域,默认分隔符为空格--
cat tmp.txt|awk '$2~/b/' {print $3}结果:777 --第二个域可以匹配b的行,打印第三个域,注意有空格--
可以减少一次grep对文件的查找
3、判断打印
cat /etc/passwd|awk -F':' '{if($1=="bill")print}' --第一个域等于字符串bill,打印--
4、数组
例文件
search 111
search 222
cm 333
search 444
命令:
cat tmp.txt |awk '{a[$1]++}END{for(i in a)print i,a[i]}'
结果:
cm 1
search 3
a[$1]为一个数据,a[$1]++记录不同数据出现次数5、awk匹配到指定的字符串并打印该字符串所在的域(列数)
格式:
awk '/行匹配串/ {for(i=1;i<=NF;i++) if($i ~ /字符串/) print $i i}' $filename
awk '/行匹配串/ {for(i=1;i<=NF;i++) if($i ~ /(字符串1|…|字符串n)/) print $i i}' $filename
例:
awk '/is/{for(i=1;i<=NF;i++) if($i ~ /is/) print $i i}' try.pl
相关文章推荐
- Linux基础命令小结(中)-Linux学习日记
- linux awk 学习笔记
- Linux多线程Pthread学习小结
- Linux基础命令学习小结
- linux awk 数组的学习心得
- linux 2.6 内核学习小结(1)---硬件相关概念
- Linux里awk中split函数的用法小结
- Linux命令学习小结
- 『zz』awk学习小结
- 最近学习的linux命令 grep,awk,cut,uniq,wc 实际应用例子
- linux 2.6 内核学习小结---硬件相关概念
- Linux多线程Pthread学习小结
- Linux多线程Pthread学习小结
- linux常用命令学习之awk命令
- linux awk用法小结
- Linux基础命令小结(下)- Linux学习日记
- Linux多线程Pthread学习小结
- 轻松学习Linux之AWK使用初步
- Linux之awk学习(二)
- linux命令学习(1)-awk