linux awk的使用

awk的用法

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具
格式为:

awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)

基本用法

log.txt的内容为:

2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
  1. 用法一:行匹配语句 awk
awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

例:

awk '{print $1,$4}' log.txt    #每行按空格或TAB分割,输出文本中的1、4项

在这里插入图片描述

awk '{printf "%-8s %-10s\n",$1,$4}' log.txt  #格式化输出

在这里插入图片描述

  1. 用法二:
awk -F  #-F相当于内置变量FS, *指定分割字符*

awk -F, '{print $1,$2}'   log.txt  #使用 “,(逗号)”分割

在这里插入图片描述
注:-F,指使用逗号来做分隔符,第一行中没有逗号,因此第一行中所有字符都是第一个字符。

awk 'BEGIN{FS=","} {print $1,$2}'  log.txt  #使用内建变量,和awk -F, '{print $1,$2}'   log.txt 相同

在这里插入图片描述

awk -F '[ ,]'  '{print $1,$2,$5}' log.txt。#使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割

在这里插入图片描述

  • 用法三:
awk -v  # 设置变量

例:

awk -va=1 '{print $1,$1+a}' log.txt #设置变量a为1

在这里插入图片描述

awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt

在这里插入图片描述

  • 用法四:
awk -f {awk脚本} {文件名}
awk '$1>2' log.txt  #过滤第一列大于2的行

在这里插入图片描述

awk '$1==2 {print $1,$3}' log.txt #过滤第一列等于2的行

在这里插入图片描述

awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt #过滤第一列大于2并且第二列等于'Are'的行

在这里插入图片描述
在这里插入图片描述

内建变量的使用

在这里插入图片描述
在这里插入图片描述

awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  log.txt

在这里插入图片描述

awk '{print NR,$1,$2,$3}' log.txt #输出顺序号 NR, 匹配文本行号

在这里插入图片描述

awk '{print $1,$2,$5}' OFS=" $ "  log.txt #输出字段分隔符,默认值与输入字段分隔符一致

在这里插入图片描述

使用正则,字符串匹配

awk '$2 ~ /th/ {print $2,$4}' log.txt #输出第二列包含 "th",并打印第二列与第四列

在这里插入图片描述

awk '/re/ ' log.txt # 输出包含 "re" 的行

在这里插入图片描述

忽略大小写

awk 'BEGIN{IGNORECASE=1} /this/' log.txt #输出包含this的行

在这里插入图片描述

模式取反

awk '$2 !~ /th/ {print $2,$4}' log.txt #输出不包含th的行

在这里插入图片描述

awk '!/th/ {print $2,$4}' log.txt

在这里插入图片描述

awk脚本

awk脚本文件为:hello.awk
解释器:

#!/usr/bin/awk -f

运行方法为:

awk -f hello.awk

格式

BEGIN {
	......(执行前的语句)
}
{
	......(处理时执行的语句)
}
END {
	......(处理完所有行后所要执行的语句)
}

BEGIN{ 这里面放的是执行前的语句 }
END {这里面放的是处理完所有的行后要执行的语句 }
{这里面放的是处理每一行时要执行的语句}

例:输出hello world语句

#!/usr/bin/awk -f
BEGIN {print "hello world"}

在这里插入图片描述

seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'

打印九九乘法表
FFFF,t_70,g_se,x_16)

seq命令

seq命令用于产生从某个数到另外一个数之间的所有整数。
格式:

seq [选项]... 尾数
seq [选项]... 首数 尾数
seq [选项]... 首数 增量 尾数

-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串 使用指定字符串分隔数字(默认使用:\n)
-w, --equal-width 在列前添加0 使得宽度相同

例:

seq 9

在这里插入图片描述

seq 2 9

在这里插入图片描述

seq -f "%3g" 9 11 #%后面指定数字的位数 默认是%g,%3g那么数字位数不足部分是空格

在这里插入图片描述

seq -f "str%03g" 9 11 #数字位数不足部分是0,%前面制定字符串

在这里插入图片描述

seq -w 98 101 #-w指定输出数字同宽

在这里插入图片描述

seq -s '=\n' 1 5 #-s指定分隔符

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值