awk总结

作者: 荷包蛋酱 | 来源:发表于2017-03-17 16:19 被阅读0次

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 传参

相关文章

  • Linux三剑客(grep sed awk) 之 awk

    awk awk****推荐去看朱双印的博客“awk****从放弃到入门”,写的真的很好,本文的awk****就总结...

  • awk总结

    1.实验的文本 awk_test.txt 开头为1,2,3,各有五行。其中有些行的$6$7$8字段为空 2. aw...

  • awk 总结

    写在前面 本篇是个人学习整理笔记而得。原书:Sed and Awk 101 Hacks -中文版引用书结尾的一句话...

  • awk总结

  • 《Linux实践技能》学习笔记 day08

    awk学习总结 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创...

  • AWK 使用总结

    原文地址 awk 是处理文本的工具,Mac 自带这个程序。 适合文本比较复杂的格式化数据。 基本语法 awk 会一...

  • awk学习总结

    简介 awk是一种编程语言,用于在linux\unix下对文本和数据的处理。linux的三剑客:grep、sed、...

  • sed和awk学习总结

    sed和awk学习总结 一些说明 我测试例子都是在mac os x下,freebsd的sed和awk和gnu的都略...

  • 18-文本处理三剑客之awk

    本章内容 ◆ awk介绍◆ awk基本用法◆ awk变量◆ awk格式化◆ awk操作符◆ awk条件判断◆ aw...

  • 2017 09-04 AWK

    本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...

网友评论

      本文标题:awk总结

      本文链接:https://www.haomeiwen.com/subject/dyxenttx.html