参考原文:https://blog.csdn.net/liang5603/article/details/80855426
grep sed awk 被称为linux中的“三剑客”
grep更适合单纯的查找或匹配文本
sed更适合编辑匹配到的文本
awk更适合格式化文本,对文本进行较复杂格式处理
- awk最常用的动作(action)就是print和printf
- awk是逐行处理的,处理完一行再处理下一行,默认以“换行符”为标记,识别每一行。
- awk默认使用空格作为分隔符去分割当前行。分割完的第一个字段为$1(不是$0,$0表示所有行),以此类推。
- $ NF不一样,NF表示每行被分割的数量。(NR - Number of Record)
-
输出多列(多个参数值)。使用逗号隔开awk ‘{print $1,$2,$3}’:结果以空格分开,但是不加逗号会连接在一起输出
-
awk可用于拼接。被拼接字符串用双引号括起来 如:awk’{print “column1:”$1,“column2:”$2}’,注意$1这种内置变了不能使用双引号,否则被当做普通文本输出。
-
输出所有行:awk’{print $0}’ 等价于 awk ‘{print}’
-
awk语法: awk[options]‘pattern{Action}’ file
如 :
$ awk ‘BEGIN{print “wolaiceshibegin…”} {print $1,$2}’ awktest.txt
$ awk ‘{print $1,$2}END{print “test ending”}’ awktest.txt -
设置输入分隔符(列以什么分隔符为准split):awk -F或者awk -v -FS 如awk -F# ‘print $1,$2’ test.txt
-
设置输出分隔符(输出列以什么分隔符join):awk -v OFS 如awk -v FS="#" -v OFS=’—’‘print $1,$2’ test.txt (输入和输出一起用,OFS output field seperator)
- -
awk变量: 分为内置变量和自定义变量
-如NR代表行号,NF代表每行被分列数:
细心如你一定注意到了一个细节,就是在打印 $0 , $1, “符号,但是在调用 NR , NF 这些内置变量的时候,就没有使用" 符进行引用,但是在awk中,只有在引用$0、 ”,引用其他变量时,不管是内置变量,还是自定义变量,都不使用"$",而是直接使用变量名。