欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

awk入门教程

程序员文章站 2022-06-01 15:46:04
...

linux中awk是一个强大的文本分析工具,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理

  1. awk空格等于把两个字段拼接起来
  2. " "表示中间是字符
  3. OFS默认是一个空格,将文本文件拼接到一起。当给某一列赋值时,会使OFS重新拼接文件

查看文件

awk '{print}' coin.txt

awk入门教程

查看第一列
awk '{print $1}' coin.txt

awk入门教程

查看文件前三列
awk '{print $1,$2,$3}' coin.txt

awk入门教程

添加制表符 “\t” 使每列直接用tab隔开
awk '{print $1 "\t" $2 "\t" $3}' coin.txt

awk入门教程

  1. NR代表文件每行的行数
  2. NF代表文件中每行有多少个字段个数
  3. “NR”=number of record
  4. “NF”=number of field
打印出文件中每列有多少个字段
awk '{print NF}' coin.txt

awk入门教程

打印出文件中有多少行
awk '{print NR}' coin.txt 

awk入门教程

打印前两列,并显示每列的行数
awk '{print NR "\t" $1 "\t" $2}' coin.txt

awk入门教程

显示出文件所有内容,并打印出每行的行数
awk '{print NR, $0}' coin.txt    # $0表示输出coin.txt的所有内容,NR", " 表示行数与第一列以一个空格分隔

awk入门教程

打印出文件内容并且输出每一行的字段个数
awk '{print NF "\t" $0}' coin.txt

awk入门教程

第三列是1986就打印出来
awk '$3==1986 {print $0}' coin.txt

awk入门教程

打印出第一列等于gold的信息
awk '$1=="gold" {print $0}' coin.txt    #字符串要使用双引号

awk入门教程

打印出第7行
awk 'NR==7{print NR, $0}' coin.txt

awk入门教程

打印出字段数为7的
awk 'NF==7{print NR, $0}' coin.txt

awk入门教程

如果awl命令后边没有文件名的话,awk会等待你输入,然后再执行命令输出信息

awk入门教程
awk入门教程

Ctrl+C 退出
用FS自定义自己的分隔符,只会以逗号进行分割,就算字符中间有空格的话,依旧会以逗号分隔打印出来awk入门教程

awk入门教程

用OFS定义输出分隔符

awk入门教程

也看以同时把输入输出分隔符定义成一个符号,中间用分号隔开

awk入门教程

可以同时打印两个文件
awk '{print NR,$0}' coin.txt 1.txt 

awk入门教程

加FILENAME 打印出文件名
 awk '{print NR,FILENAME,$0}' coin.txt 1.txt 

awk入门教程

可以选择文件内容进行赋值,比如把第三列输出成空格
awk '{$3=" ";print $0}' coin.txt

awk入门教程

用NF打印出每列最后一个字段
awk '{print $NF}' coin.txt    #NF代表每列有多少个字段,所以直接打印NF就可以

awk入门教程

打印每列倒数第二个同理
awk '{print $(NF-1)}' coin.txt

awk入门教程

正则表达式
/ /
编辑一个test文件,打印出”abc“

awk入门教程

awk '/abc/{print $0}' test.txt

awk入门教程

/a.b/ 点在这里表示a和b之间任意一个字符
awk '/a.c/{print $0}'

awk入门教程

/a.c/ " \ "是转译字符,只打印出a.c, 匹配其他特殊字符时同理

awk入门教程
awk入门教程

^和$ ^表示所匹配字符串要在字段最前面,$表示所匹配字符串在字段最后
awk '/^777/{print $0}'
awk '/777$/{print $0}

awk入门教程
awk入门教程

/a[xzy]b/ 表示可以匹配a和b中间[]里的xzy中任意一个字符
awk '/a[xzy]c/{print $0}'

awk入门教程

/a[a-z]b/同理,匹配[]中a和z直接任意一个字符
awk '/a[a-z]c/{print $0}'

awk入门教程

awk '/a[a-zA-Z]c/{print $0}'    #a到z A到Z中间任意一个字符

awk入门教程

^如果在[]里表示不是的意思
[^]
awk '/a[^a-z]c/ {print $0}'    #小写a到z不匹配

awk入门教程

* 和 + ?
  1. *表示0次或多次
    比如:
    /a*b/
    可以匹配到
    “ab”
    “aab”
    “aaab”
    “b”

  2. +表示最少1次
    比如:
    /a+b/
    可以匹配到
    “ab”
    “aab”
    不能匹配到
    “b”

  3. ?表示是或否
    比如:
    /a?b/
    只能匹配到
    “b”
    “ab”

{} 可以规定匹配到的次数
awk '/ab{2}c/ {print $0}'    #{2}表示只可以出现2个b

awk入门教程

也可以扩展{2,3}
awk '/ab{2,3}c/ {print $0}'    #表示b可以出现2次到3次

awk入门教程

/ab{2,}c/ 表示最少出现2个b。

awk入门教程

()表示把()里的变成一个整体

比如/(ab)+c/

awk '/(ab)+c/ {print $0}'

awk入门教程

欢迎加入

awk入门教程

相关标签: awk