awk 命令

AWK

command 读前处理 行处理 读后处理
1、读前处理: BEGIN{awk_cmd1;awk_cmd2}
2、行处理:定址命令
定址方法:正则、变量、比较和关系运算
正则需要用//包围起来
awk -F: '/root/{print}' gad
awk -F: '$1~/root/{print}' gad 第一列匹配
awk -F: '$1~/<root>/{print}' gad 第一列匹配,锁定字符串匹配
awk -F: '$1!~/root/{print}' gad
. 除了换行符以外的任意单个字符
[] 字符组内的任一字符
[^]对字符组内的每个字符取反(不匹配字符组内的每个字符)
[] 非字符组内的字符开头的行

例如:提取passwd文件的5-10行
awk 'BEGIN{print "/etc/passwd"}NR>5&&NR<10{print $0}END{print "完成"}' /etc/passwd

NR 表示AWK读入的行数 (一共处理多少行,无论多少个文件)
FNR表示读入行所在文件中的行数 (每个文件中有多少个文件)

3、读后处理END{awk_cmd1;awk_cmd2}

awk -F "" '{for(i=1;i<=NF;i++) print $i}' gad.txt 逐字换行
NF代表每行的元素个数
NR 表示AWK读入的行数 (一共处理多少行,无论多少个文件)
FNR表示读入行所在文件中的行数 (每个文件中有多少个文件)

awk '{print NR,FNR,$1}' file1 file2

1 1 AAAA
2 2 aaaa
3 3 a
4 1 bb
5 2 bbbbbbbb

赋值 = ++ -- += 。。。
awk 'BEGIN{a=1;print a++;print a}' 先执行命令然后a+1
|| 逻辑或 && 逻辑与 ! 取反
匹配正则或不匹配,正则需要用/正则/ 包围住
~ !~
关系比较字符串时要把字符串用双引号引起来
< <= > >= != ==

转义序列
\ \自身 $ 转义$ \t 制表符 \b 退格符 \r 回车符 \n 换行符 \c 取消换行

-v可以借用此方式从shell变量中引入
a=root
awk -v var=$a -F':' '$1==var{print $1}' passwd
a=whoami ; awk -v var=$a -F':' '$1==var{print $3,$6}' /etc/passwd

FS 定义字段分隔符,默认为一个空格
OFS 输出的字段分隔符,默认为一个空格

awk 'BEGIN{ FS=":";OFS="-" }{ print $1,$3,$5 }' /etc/passwd | head -2

root-0-root
bin-1-bin

awk 'BEGIN{ FS=":";OFS="-" }{ print $1”@@”$3”##”$5 }' /etc/passwd | head -2 自己指定OFS

root@@0##root
bin@@1##bin
RS 记录分隔符,默认为一个换行符
head -2 /etc/passwd | awk 'BEGIN{ RS=":"}{print}' 把:号换成了换行符
ORS 输出的记录分隔符,默认为一个换行符
head -2 /etc/passwd | awk 'BEGIN{ ORS="-"}{print}' 把换行符换成了 - 号
FILENAME 文件名
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 输出系统环境变量

awk 'BEGIN{print ENVIRON["USER"]}'

root

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容