linux awk
参数总结
-f 从脚本文件中读取awk命令。
-F 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F: (–field-separator)
-v 赋值一个用户定义变量。
内置变量
FS 保存或设置字段分隔符,如FS=”:”
$n 指定分隔的第n个字段,如$1、$3分别表示第1、第3列.$0代表输入整行内容
NF number of fields,当前行的字段数
NR 记录当前已经读入行的数量
FNR 当前行在源文件中的行数
OFS The output field separator, a space by default.
ORS The output record separator, by default a newline.
FILENAME 被处理的文件名
RS 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’
RT The record terminator.
BEGIN BEGIN和END是两种特殊的模式,没有针对输入进行测试。所有BEGIN模式的动作部分都被合并,就好像所有语句都写在一个BEGIN块中一样。它们在读取任何输入之前执行。
END 所有的结束块都被合并,当所有的输入都被耗尽时(或者当执行exit语句时)执行。开始和结束模式不能与模式表达式中的其他模式组合。开始和结束模式不能缺少动作部分。
BEGINFILE BEGINFILE和ENDFILE是附加的特殊模式,其主体在读取每个命令行输入文件的第一条记录之前和读取每个文件的最后一条记录之后执行。
ENDFILE
/regular expression/ 对于/regular expression/patterns,将对与正则表达式匹配的每个输入记录执行关联语句。正则表达式与egrep(1)中的表达式相同,总结如下。
relational expression 关系表达式可以使用下面关于操作一节中定义的任何运算符。它们通常测试某些字段是否与某些正则表达式匹配。
pattern && pattern 逻辑AND,与C中的运算符相同。它们进行短路计算,也与C中的运算符相同,用于组合更原始的模式表达式。
pattern||pattern 逻辑OR,与C中的运算符相同。它们进行短路计算,也与C中的运算符相同,用于组合更原始的模式表达式。
! pattern 逻辑NOT,与C中的运算符相同。它们进行短路计算,也与C中的运算符相同,用于组合更原始的模式表达式。
pattern1, pattern2 表达式的pattern1,pattern2形式称为范围模式。它匹配所有输入记录,从匹配pattern1的记录开始,一直到匹配pattern2的记录为止(包括pattern2)。它不与任何其他类型的模式表达式相结合。
实例
//输出第 1~3 行内容
awk 'NR==1,NR==3{print}' 1.txt
awk '(NR>=1)&&(NR<=3){print}' 1.txt
//输出所有奇数行的内容
awk '(NR%2)==1{print}' testfile2
//输出所有偶数行的内容
awk '(NR%2)==0{print}' testfile2
//输出以 root 开头的行
awk '/^root/{print}' /etc/passwd
//输出以 nologin 结尾的行
awk '/nologin$/{print}' /etc/passwd
//计算内存
free -m | awk '/Mem:/ {print int($3/($3+$4)*100)}'
//通过管道、双引号调用 Shell 命令
//统计以冒号分隔的文本段落数,END{}语句块中,往往会放入打印结果等语句
echo $PATH | awk 'BEGIN{RS=":"};END{print NR}'