xml地图|网站地图|网站标签 [设为首页] [加入收藏]
来自 关于我们 2019-11-17 13:40 的文章
当前位置: 新濠国际登录平台 > 关于我们 > 正文

command 读前处理 行处理 读后处理,第一行打印

awk [-field-separator] 'commands' input-file(s)

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
. 除了换行符以外的任意单个字符
[] 字符组内的任一字符
[^]对字符组内的每个字符取反(不匹配字符组内的每个字符)
[] 非字符组内的字符开头的行

awk -F':' ... 

例如:提取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 '{print $0}' a.txt 

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 '{print $1,$3}' a.txt 

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

root-0-root
bin-1-bin

  • 打印第1、3列

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 "0"}{print $1}' a.txt  

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

root

  • 第一行打印0

新濠国际登录平台,awk '{print $1}END{print "0"}' a.txt 

  • 最后一行打印0

awk '$1 == "0" {print $0}' a.txt 

  • 第一列等于0的行

awk '$1!="0" {print $0}' a.txt 

  • 第一列不等于0的行

awk '$1<=$2' 

  • 第一列小于等于第二列的行

awk '$0!~/0/' a.txt 

  • 正则匹配所有列不含0的行

awk '$1~/(12|(34)/' a.txt 

  • 正则匹配第一列匹配12或34的行

本文由新濠国际登录平台发布于关于我们,转载请注明出处:command 读前处理 行处理 读后处理,第一行打印

关键词: