awk总结

1.实验的文本 awk_test.txt

开头为1,2,3,各有五行。其中有些行的$6$7$8字段为空

1   2   3   4   5   6   7   8
1   2   3   4   5   
1   2   3   4   5   6   7   8
1   2   3   4   5
1   2   3   4   5
2   2   3   4   5   6   7   8
2   2   3   4   5   
2   2   3   4   5   6   7   8
2   2   3   4   5   
2   2   3   4   5
3   2   3   4   5   6   7   8
3   2   3   4   5   6   7   8
3   2   3   4   5   
3   2   3   4   5   6   7   8
3   2   3   4   5   

2. awk 统计列数

 cat awk_test.txt | awk  '{print NF}'

3.awk统计行数 & awk 引用shell里的变量

lines=`cat awk_test.txt| wc -l`
echo ${lines}
export lines
awk  '{printf("%d",ENVIRON["lines"])}' awk_test.txt

4.awk 内置变量

ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数 (列数)
NR                 已读的记录数 (从1到最后一行行号)
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符

5. 筛选空字段

例如,找出$8字段为空的行

cat awk_test.txt | awk  '$8 ~/^$/{print NR}'

6.演示

现在awk_test.txt变为

1   2   3   4   5   6   7   8
1   2   3   4   5   
1   2   3   4   5   6   7   8
1   2   3   4   5
1   2   3   4   5

问题:求非空$6的平均值

cat awk_test.txt | awk  'BEGIN{b=0;} $8 !~/^$/{a+=$8;b++;} END{printf("%d\t%d\n",a/b)}'

7.awk 中的正则表达、通配符

  • ~,匹配操作符, 用来在记录或者域内匹配正则表达式 (针对某列)
  • !~表示不匹配
  • *****可以和零个或多个任意字符匹配
  • ?与任何单个字符匹配
  • ** .** 匹配任何单个字符,每行的换行符也算
  • $匹配行结束符
  • ^匹配一行的开始
  • *****匹配0或多个正好在它之前的那个字符
  • **用来屏蔽特殊字符的含义
  • +匹配前面的正则表达式的一次或多次出现。
    一些连用的正则表达符号:
  • ^$ 表示空行
  • ^.$* 表示整行

8. awk 中的BEGIN和END

BEGIN: awk开始扫描输入之前执行,可以在里面进行变量赋值。
比如演示6中的BEGIN{b=0;} 。 BEGIN 初始化结束以后,后面的{}才正式开始扫描输入文件,默认以换行符为分隔。也可以更改,比如以:为分隔

awk  -F ':'  'BEGIN {a=12;}  {a+=$1;} END {print("%d\n",a)}'   xxfile.txt

END:END之后列出的操作将在扫描完全部的输入之后执行,通常用于输出最终结果。

9. awk 和shell 之间传参

  • shell 向 awk传参
# 1.  “‘ $var ’”
var=”test”
awk ‘BEGIN{print “‘$var'”}’
# 2. awk -v 用于参数较少的情况下
var=”this is a test”
awk -v awk_var=”$var” ‘BEGIN {print awk_var}’
  • awk 向 shell 传参

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,276评论 2 25
  • awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...
    哈喽别样阅读 1,599评论 0 4
  • awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...
    BossHuang阅读 1,469评论 0 9
  • awk: grep,sed,awk grep:文本过滤 sed:文本编辑 awk:文本格式化工具; 1 什么是aw...
    木林森阅读 1,829评论 0 16
  • awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多...
    yeahuh阅读 4,004评论 0 7