awk文本处理

awk

  • 简介
  • 基本语法
  • 变量
  • 进阶

简介

awk是一门编程语言,报告生成器,格式化文本输出
awk命名来自Aho, Weinberger, Kernighan三位大佬名字首字母缩写
awk多版本版本: awk、nawk、gawk,未作特别说明,一般指gawk,gawk是AWK的GNU版本

基本语法

原理

awk的运行原理将一行一行的文本作为输入,通过指定的域、行分隔符筛选数据,并对筛选到的数据进行定制化处理

语法

awk [选项] 'program' var=value file...
awk [选项] -f program file var=value file...
awk [选项] 'BEGIN{action;...}' pattern {action;...}END{action;...} file...

概念

  • 记录
  • 分隔符
  • 变量

记录:一行标准输入、文件的一行都可以看做为一条记录
域:也叫做列,一个记录可能会有很多列,通常awk将空格或者
分隔符:域、记录都有分隔符,同时也区分输入分隔符和输出分隔符

选项

  • -F 指定输入域分隔符
  • -v 指定变量
  • -f 指定脚本文件

-F 域分隔符选项

只打印用户名

awk -F: '{print $1}' /etc/passwd

-v 变量

自定义变量、内置变量

自定义变量

打印userName和uid,并用|分割

awk -F: -v var="|" '{print $1var$3}' /etc/passwd
awk -F: -v var="|" '{print $1var$3}' /etc/passwd

自定义变量区分大小写

awk -F: -v OFS=" | " -v var="var" -v Var='Var' '{print $1,var,$3,Var}' /etc/passwd

内置变量

  • FS 输入域分隔符,默认为空白字符
  • OFS 输出域分隔符,默认为空白字符
  • RS 输入记录分隔符
  • ORS 输出记录分隔符
FS

通过内置变量FS指定输入域分隔符

awk -F: '{print $1,$3,$7}' /etc/passwd
awk -v FS=':' '{print $1,FS,$3}' /etc/passwd
OFS

通过内置变量OFS指定输出域分隔符

awk -v FS=':' -v OFS='|' '{print $1,$3}' /etc/passwd
RS

通过内置变量RS指定输入记录分隔符

head -n 1 /etc/passwd | awk -v RS=':' '{print $1}'
ORS

通过内置变量ORS指定输出记录分隔符

head -n 1 /etc/passwd | awk -v RS=':' -v ORS='|' '{print $0}'

-f

将常用awk命令格式放入到文件中来引用

cat f.awk
{print $1,$3}
awk -v FS=':' -v OFS='|' -f f.awk /etc/passwd

进阶

更多参考PDF文档

posted @ 2019-05-17 11:49  pli  阅读(543)  评论(0)    收藏  举报