awk 入门教程

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 入门教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章