网站首页 > 技术教程 正文
注意,awk后面只能用单引号, awk能执行的指令只有print,这是awk程序内部定义的!,必须要用单引号将字符串原封不动传进去
awk中所有字符串需要双引号,否则当作变量, 变量和字符串可以直接连接
awk [选项参数] 'script' var=value file(s)brawk [选项参数] -f scriptfile var=value file(s)
注意,选项参数里面也有, -v var=value用于自定义变量,但是放置位置有要求,brawk 'script' var1=v1 var2=v2 ... # 后面的变量定义,使用空格隔开brawk -v var1=v2 -v var2=v2 'script' var3=v3 ... # 前面的变量定义,用多个-v来定义
1. 引用参数 $:
$1, $2, ... 分别是第一个参数,第二个参数....., $0表示整行
2.文本分割 -F
# 使用","分割br $ awk -F, '{print $1,$2}' log.txt # -F与,的空格无关紧要br # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割br $ awk -F '[ ,]' '{print $1,$2,$5}' log.txt
例子(如果要使用完整正则,应该用'单引号而非双引号,否则经常报错)
# 简单的过滤条件br# 过滤得到第一列为2的行并输出brawk '$1==2 {print $1}' log.txt
# 正则br# ~表示正则开始, / /中间是模式brawk '$1 ~/app/' tst.txt # 输出第一个参数中包含app的行brbr# 模式取反brawk '$1 !~/app/' test.txtbrawk '$1 !/app/' test.txt
cat /proc/net/snmp | grep -E "Udp: [[:digit:]]+" | awk -F ' ' '{print $6 > "1.txt"; print $7 > "2.txt"}' br# 虽然只支持print, 但是还支持linux最基本的一些操作,如重定向
# print的使用, 每个逗号输出一个空格brprint var1, var2, ... br# 变量也可以是字符串,支持字符串的连接:brprint var1","var2, var2 # 打印逗号的方式
内建变量
变量 | 描述 |
$n | 当前记录的第n个字段,字段间由FS分隔 |
$0 | 完整的输入记录 |
ARGC | 命令行参数的数目 |
ARGIND | 命令行中当前文件的位置(从0开始算) |
ARGV | 包含命令行参数的数组 |
CONVFMT | 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组 |
ERRNO | 最后一个系统错误的描述 |
FIELDWIDTHS | 字段宽度列表(用空格键分隔) |
FILENAME | 当前文件名 |
FNR | 各文件分别计数的行号 |
FS | 字段分隔符(默认是任何空格) |
IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
NF | 一条记录的字段的数目 |
NR | 已经读出的记录数,就是行号,从1开始 |
OFMT | 数字的输出格式(默认值是%.6g) |
OFS | 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符 |
ORS | 输出记录分隔符(默认值是一个换行符) |
RLENGTH | 由match函数所匹配的字符串的长度 |
RS | 记录分隔符(默认是一个换行符) |
RSTART | 由match函数所匹配的字符串的第一个位置 |
SUBSEP | 数组下标分隔符(默认值是/034) |
脚本:
1. 文件方式: 可以使用比较复杂的指令
#!/bin/awk -fbr#运行前brBEGIN {br math = 0br english = 0br computer = 0br br printf "NAME NO. MATH ENGLISH COMPUTER TOTAL\n"br printf "---------------------------------------------\n"br}br#运行中br{br math+=$3br english+=$4br computer+=$5br printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5br}br#运行后brEND {br printf "---------------------------------------------\n"br printf " TOTAL:%10d %8d %8d \n", math, english, computerbr printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NRbr}
2. 交互方式
# 计算文件大小brls -l *.txt | awk '{sum+=$5} END {print sum}'br# 99乘法表brseq 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")}'
3. awk 条件语句和循环语句:
if (condition)br action-1brelsebr action-2brbrif (condition)br{br actionbr}
for (init, condition, incre\decre)br actionbr brwhile (condition)br action
breakbrcontinuebrexit: 退出程序
- 上一篇: ZYNQ QSPI flash分区设置&启动配置
- 下一篇:已经是最后一篇了
猜你喜欢
- 2025-07-07 ZYNQ QSPI flash分区设置&启动配置
- 2025-07-07 Linux 的 18 个装 B 命令,记得全部搂一遍
- 2025-07-07 【Linux】程序执行的黑魔法:五分钟彻底搞懂 Linux ELF 文件
- 2025-07-07 聊一聊 Linux 上对函数进行 hook 的两种方式
- 2025-07-07 第十二节 Ubuntu 系统 Docker 镜像安装与容器运行指南
你 发表评论:
欢迎- 最近发表
-
- 搞懂linux awk的使用(linux awk $1)
- ZYNQ QSPI flash分区设置&启动配置
- Linux 的 18 个装 B 命令,记得全部搂一遍
- 【Linux】程序执行的黑魔法:五分钟彻底搞懂 Linux ELF 文件
- 聊一聊 Linux 上对函数进行 hook 的两种方式
- 第十二节 Ubuntu 系统 Docker 镜像安装与容器运行指南
- Linux常用场景-VIM文本编辑批量替换
- Linux 下使用 killall 命令终止进程的 8 大用法
- 告别Permission denied!手把手教你玩转Linux文件权限
- [Linux Shell]批量更改文件&文件夹 名大写为小写
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)