1. 查看awk:
#which awk
/usr/bin/awk
2. 查看awk链接
#ll /usr/bin/awk;
lrwxrwxrwx. 1 root root 4 Nov 21 04:45 /usr/bin/awk -> gawk
3. 打印file.txt文件中第1列(awk后面必须用单引号,$0表示一行,$1表示第一列)
#cat file.txt|awk '{print $1}'
4. awk默认以空白为分隔符,awk是一行一行读取并执行命令
5. 指定分隔符:
a> 指定冒号为分隔符
#cat file.txt|awk -F':' '{print $1}'
b> 指定冒号和空格为分隔符
#cat file.txt|awk -F'[: ]' '{print $1}'
c> 指定一个或连续多个冒号和一个或多个空格为分隔符
#cat file.txt|awk -F'[: ]+' '{print $1}'
6. 同时打印多列用,
#cat file.txt|awk '{print $1,$2}'
7. 双引号之间可用任意字符来连接
#cat file.txt|awk '{print $1"+"$2}'
8. 变量NF为一行有多少列,$NF表示最后一列(number of field)
a> 打印每行有多少列
#cat file.txt|awk '{print NF}'
b>打印最后一列
#cat file.txt|awk '{print $NF}'
c>打印倒数第2列:$(NF-1)
#cat file.txt|awk '{print $(NF-1)}'
9. 变量NR(number of record)行数,如果有多个文件则是连续递增
变量FNR是相对行数
10. 查看总行数
#awk '{print NR}' file.txt|tail -1
11. awk 后面'{ 之间可以写个条件,
a> awk '1{}'其中1为真
b> awk '0{}'其中0为假
c> awk '"0"{}'这里的字符为真
d> awk '{a=0}a{}'变量a有值,则根据a的值来判断
12. BEGIN表示还没读取之前做的事情,最常用的是给变量赋值
#awk 'BEGIN{print "============================"}{print $0}' file.txt
13. END表示读取完成之后做的事情
#awk '{print $0}END{print "============================"}' file.txt
14. 计算
#awk '{a=$1+ $2+$3; print $0, a, a/3}' file.txt
15. 计算第1列之和
#awk '{a+=$1}END{print a}' 说明变量a当遇到数字时a的初始值0,否则为空
16. 字符串拼接
#awk '{a=a" "$1}END{print a}' file.txt
17. if(){}else{}条件
#awk '{if($2>80){print $0}}' file.txt
#ll | awk '{if($5>100){print $0}}'
18. 正则表达(与js相似)
a> 以-打头的
#ll | awk '/^-/{if($5>100){print $0}}'
b> 第2列匹配456的打印出来
#awk '$2~/456/{print $0}' file.txt
19. awk默认变量为大写,所以变量取名都是小写
a> 外部变量
#a=2
#awk '{print '$a'}' file.txt
或者
#awk -v a=$a '{print a}' file.txt(-v与a之间的空格可有可无)
20. for循环
a> 打印每一列并一行完后打印====
#awk '{for(i=1;i<=NF;i++){print $i;if(i==NF){print "===="}}}' file.txt
或
#awk '{for(i=1;i<=NF;i++){print $i}{print "===="}}' file.txt
b> 打印奇数列
#awk '{for(i=1;i<=NF;i+=2){printf $i" "}{print "===="}}' file.txt
21. print打印有换行符,printf打印无换行符
22. OFS为输出分隔符,默认为空格
a> 把输出分隔符设置成+
#awk 'BEGIN{OFS="+"}{print $1, $2}' file.txt
23. RS为输入分隔符,默认为换行
a> 把输入分隔符设置成空格
#awk 'BEGIN{RS=" "}{print $0}' file.txt (如果不加BEGIN,则第一行有问题)
24. 有两列,第1列取第1个文件的第1列,第2列取第2个文件的第2列
#awk 'NR==FNR{a[NR]=$1}NR!=FNR{print a[FNR], $2}' file1 file2
25. 查看文件内容:#awk '1' file.txt
#awk '{$1="haha"}1' 相当于 #awk '{$1="haha"; print $0}'
转载于:https://blog.51cto.com/begoodluck/1876855