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}'