awk入门教程
程序员文章站
2022-06-01 15:46:04
...
linux中awk是一个强大的文本分析工具,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理
- awk空格等于把两个字段拼接起来
- " "表示中间是字符
- OFS默认是一个空格,将文本文件拼接到一起。当给某一列赋值时,会使OFS重新拼接文件
查看文件
awk '{print}' coin.txt
查看第一列
awk '{print $1}' coin.txt
查看文件前三列
awk '{print $1,$2,$3}' coin.txt
添加制表符 “\t” 使每列直接用tab隔开
awk '{print $1 "\t" $2 "\t" $3}' coin.txt
- NR代表文件每行的行数
- NF代表文件中每行有多少个字段个数
- “NR”=number of record
- “NF”=number of field
打印出文件中每列有多少个字段
awk '{print NF}' coin.txt
打印出文件中有多少行
awk '{print NR}' coin.txt
打印前两列,并显示每列的行数
awk '{print NR "\t" $1 "\t" $2}' coin.txt
显示出文件所有内容,并打印出每行的行数
awk '{print NR, $0}' coin.txt # $0表示输出coin.txt的所有内容,NR", " 表示行数与第一列以一个空格分隔
打印出文件内容并且输出每一行的字段个数
awk '{print NF "\t" $0}' coin.txt
第三列是1986就打印出来
awk '$3==1986 {print $0}' coin.txt
打印出第一列等于gold的信息
awk '$1=="gold" {print $0}' coin.txt #字符串要使用双引号
打印出第7行
awk 'NR==7{print NR, $0}' coin.txt
打印出字段数为7的
awk 'NF==7{print NR, $0}' coin.txt
如果awl命令后边没有文件名的话,awk会等待你输入,然后再执行命令输出信息
Ctrl+C 退出
用FS自定义自己的分隔符,只会以逗号进行分割,就算字符中间有空格的话,依旧会以逗号分隔打印出来
用OFS定义输出分隔符
也看以同时把输入输出分隔符定义成一个符号,中间用分号隔开
可以同时打印两个文件
awk '{print NR,$0}' coin.txt 1.txt
加FILENAME 打印出文件名
awk '{print NR,FILENAME,$0}' coin.txt 1.txt
可以选择文件内容进行赋值,比如把第三列输出成空格
awk '{$3=" ";print $0}' coin.txt
用NF打印出每列最后一个字段
awk '{print $NF}' coin.txt #NF代表每列有多少个字段,所以直接打印NF就可以
打印每列倒数第二个同理
awk '{print $(NF-1)}' coin.txt
正则表达式
/ /
编辑一个test文件,打印出”abc“
awk '/abc/{print $0}' test.txt
/a.b/ 点在这里表示a和b之间任意一个字符
awk '/a.c/{print $0}'
/a.c/ " \ "是转译字符,只打印出a.c, 匹配其他特殊字符时同理
^和$ ^表示所匹配字符串要在字段最前面,$表示所匹配字符串在字段最后
awk '/^777/{print $0}'
awk '/777$/{print $0}
/a[xzy]b/ 表示可以匹配a和b中间[]里的xzy中任意一个字符
awk '/a[xzy]c/{print $0}'
/a[a-z]b/同理,匹配[]中a和z直接任意一个字符
awk '/a[a-z]c/{print $0}'
awk '/a[a-zA-Z]c/{print $0}' #a到z A到Z中间任意一个字符
^如果在[]里表示不是的意思
[^]
awk '/a[^a-z]c/ {print $0}' #小写a到z不匹配
* 和 + ?
-
*表示0次或多次
比如:
/a*b/
可以匹配到
“ab”
“aab”
“aaab”
“b” -
+表示最少1次
比如:
/a+b/
可以匹配到
“ab”
“aab”
不能匹配到
“b” -
?表示是或否
比如:
/a?b/
只能匹配到
“b”
“ab”
{} 可以规定匹配到的次数
awk '/ab{2}c/ {print $0}' #{2}表示只可以出现2个b
也可以扩展{2,3}
awk '/ab{2,3}c/ {print $0}' #表示b可以出现2次到3次
/ab{2,}c/ 表示最少出现2个b。
()表示把()里的变成一个整体
比如/(ab)+c/
awk '/(ab)+c/ {print $0}'