dz网站恢复数据库,电子商务做网站实训体会,文章列表页wordpress,网站建设net接口shell-awk语法整理 前言基本语法内置变量1. $02. NF3. NR4. FS5. RS6. OFS7. ORS8. FILENAME9. FNR10. ARGV11. ENVIRON12. IGNORECASE13. RSTART 和 RLENGTH示例解释 内置函数循环语句#xff08;后面的;可不加#xff09;条件语句高级特性示例 特殊模式BEGINEND组合示例BEG… shell-awk语法整理 前言基本语法内置变量1. $02. NF3. NR4. FS5. RS6. OFS7. ORS8. FILENAME9. FNR10. ARGV11. ENVIRON12. IGNORECASE13. RSTART 和 RLENGTH示例解释 内置函数循环语句后面的;可不加条件语句高级特性示例 特殊模式BEGINEND组合示例BEGINFILE 和 ENDFILEgetline 模式总结 常用命令行选项 前言 AWK是一种功能强大的文本处理工具可根据指定的规则对文本和数据文件进行逐行处理通过灵活使用模式和动作的组合可以实现复杂的文本分析和数据处理任务适合处理各种格式的文本文件和数据流 基本语法
AWK的基本语法结构为
awk pattern { action } filenamepattern用来匹配输入数据的模式action在匹配到符合模式的行时执行的操作filename要操作的目标文件
例如要打印每行以字母 “a” 开头的文本
awk /^a/ { print } filename其中/^a/ 是模式{ print } 是操作会打印文件中所有以字母 “a” 开头的行
内置变量 AWK 提供了许多内置变量用于获取关于输入数据、当前行、行号等信息 1. $0
描述代表当前行的内容示例打印所有行的内容print后面什么都不带也是一样的效果
awk { print $0 } filename2. NF
描述代表当前行的字段数示例打印每行的字段数
awk { print NF } filename3. NR
描述代表当前行的行号示例打印每行的行号和内容
awk { print NR, $0 } filename4. FS
描述代表字段分隔符默认是空白字符示例使用不同的字段分隔符打印字段内容
awk -F: { print $1, $2 } filename5. RS
描述代表记录分隔符默认是换行符示例按不同的记录分隔符处理数据
awk BEGIN { RS } { print $0 } filename6. OFS
描述代表输出字段分隔符示例设置不同的输出字段分隔符
awk BEGIN { OFS | } { print $1, $2 } filename7. ORS
描述代表输出记录分隔符示例设置不同的输出记录分隔符
awk BEGIN { ORS\n\n } { print $0 } filename8. FILENAME
描述代表当前输入文件的名称示例打印当前处理的文件名
awk { print FILENAME } filename9. FNR
描述代表当前处理的文件中的行号从1开始计数示例打印当前处理的行号和内容
awk { print FNR, $0 } filename10. ARGV
描述一个包含命令行参数的数组示例遍历打印命令行参数
awk BEGIN { for (i 0; i ARGC; i) print ARGV[i] } file1 file211. ENVIRON
描述一个包含环境变量的关联数组示例打印所有环境变量及其值
awk BEGIN { for (var in ENVIRON) print var, ENVIRON[var] }12. IGNORECASE
描述控制字符串匹配时是否忽略大小写示例在匹配时忽略大小写
awk BEGIN { IGNORECASE1 } /pattern/ { print } filename13. RSTART 和 RLENGTH
描述 RSTART上次 match() 函数匹配的起始位置RLENGTH上次 match() 函数匹配的长度 示例使用 match() 函数找到并打印匹配的子字符串及其位置
awk { if (match($0, /pattern/)) print Found:, substr($0, RSTART, RLENGTH) } filename示例解释
- $0表示当前行的全部内容 - NF表示当前行的字段数 - NR表示当前行的行号 - FS用于指定字段分隔符 - RS用于指定记录分隔符 - OFS用于指定输出字段分隔符 - ORS用于指定输出记录分隔符 - FILENAME用于输入文件的名称 - FNR用于输入当前处理的文件中的行号 - ARGV输出命令行参数的数组 - ENVIRON输出环境变量的关联数组 - IGNORECASE控制字符串匹配时是否忽略大小写 - RSTART上次 match() 函数匹配的起始位置 - RLENGTH上次 match() 函数匹配的长度
内置函数 AWK 提供了多种内置函数用于字符串处理、数学计算等 字符串函数 length(str)返回字符串长度index(str, search)返回搜索字符串在原字符串中的位置split(str, arr, sep)将字符串按分隔符分割成数组 数学函数 sin(x)、cos(x)、sqrt(x)三角函数和平方根函数rand()返回一个0到1之间的随机数
循环语句后面的’;可不加
AWK支持类C语言风格的循环语句
for循环
for (i 1; i 10; i) {print i;
}while循环
while (condition) {print $0;getline;
}条件语句
AWK 中的条件语句与其他编程语言类似
if语句
if (condition) {print Condition is true;
} else {print Condition is false;
}switch语句
switch (variable) {case value1: {print Value 1;break;}case value2: {print Value 2;break;}default: {print Default case;break;}
}高级特性
AWK还支持更高级的特性如函数定义、数组操作和模式动作的组合使用
函数定义
function add(x, y) {return x y;
}数组操作
# 创建数组
arr[key1] value1;
arr[key2] value2;# 遍历数组
for (key in arr) {print key, arr[key];
}示例
演示了AWK的基本语法、内置变量、函数、循环和条件语句的使用
# AWK script to print lines containing error
# and count lines where first field is numeric# Print lines containing error
/error/ {print;
}# Count lines where first field is numeric
$1 ~ /^[0-9]$/ {count;
}# END block to print count
END {print Numeric lines count:, count;
}特殊模式
BEGIN 描述BEGIN 块用于在处理任何输入数据之前执行初始化任务例如设置变量、打印标题、配置输出格式等BEGIN 块中的代码在任何输入数据处理之前运行一次 示例打印表头并设置字段分隔符
awk BEGIN { OFS \t; print Name, Age, City } { print $1, $2, $3 } filename示例中在处理 filename 文件之前会打印表头 “Name”, “Age”, “City”并将输出字段分隔符 (OFS) 设置为制表符
END 描述END 块用于在处理所有输入数据之后执行任务例如打印总结信息、计算总和或平均值等。END 块中的代码在所有输入数据处理完后运行一次 示例计算并打印行数
awk END { print Total lines:, NR } filename示例中在处理完 filename 文件的所有行之后打印总行数其中 NR 是记录数的内置变量表示总行数
组合示例
可同时使用 BEGIN 和 END 块来初始化和总结数据处理
awk BEGIN { print Processing file:, FILENAME } { sum $2 } END { print Total sum of second column:, sum } filenameBEGIN { print “Processing file:”, FILENAME }在处理任何数据之前打印当前处理的文件名{ sum $2 }处理每一行将第二列的值累加到 sum 变量中END { print “Total sum of second column:”, sum }在处理完所有数据后打印第二列值的总和
BEGINFILE 和 ENDFILE 描述 BEGINFILE在处理每个输入文件之前执行一次ENDFILE在处理每个输入文件之后执行一次 示例
awk BEGINFILE { print Start processing, FILENAME }{ print $0 }ENDFILE { print End processing, FILENAME } file1 file2示例会在处理每个输入文件 file1 和 file2 前后分别打印处理开始和处理结束的消息
getline 模式 描述 getline 模式用于手动从输入中读取下一行并处理。可与条件和循环结构一起使用以控制输入数据的处理方式 示例
awk /pattern/ { print Found:, $0 if (getline next_line 0) { print Next line:, next_line } } filename示例会在匹配到某个模式后打印当前行和下一行的内容如果存在
总结
BEGIN特殊模式块用于在处理输入数据之前执行初始化操作END特殊模式块用于在处理完所有输入数据后执行总结或清理操作BEGINFILE 和 ENDFILE用于在处理每个输入文件前后执行特定操作getline模式允许在脚本执行过程中手动控制输入行的读取和处理方式
常用命令行选项
-F separator
描述指定字段分隔符。默认情况下字段分隔符为任何空白字符序列示例
awk -F , { print $1 } filename-F , 指定逗号为字段分隔符然后打印每行的第一个字段-v varvalue
描述设置 AWK 变量的值。可以在 AWK 脚本中使用 -v 选项来传递变量示例
awk -v threshold50 $1 threshold { print $0 } filename示例中定义了一个变量 threshold 并将其传递给 AWK 脚本然后根据条件打印符合要求的行-f script-file
描述从指定的文件中读取 AWK 脚本示例
awk -f myscript.awk data.txt示例中AWK 将执行 myscript.awk 文件中的脚本来处理 data.txt 文件