您的位置:首页 > 新闻 > 资讯 > 上海市_海南工程建设招标网_互联网产品推广是做什么的_排名优化公司口碑哪家好

上海市_海南工程建设招标网_互联网产品推广是做什么的_排名优化公司口碑哪家好

2025/5/30 12:42:32 来源:https://blog.csdn.net/ZhanBiaoChina/article/details/147162630  浏览:    关键词:上海市_海南工程建设招标网_互联网产品推广是做什么的_排名优化公司口碑哪家好
上海市_海南工程建设招标网_互联网产品推广是做什么的_排名优化公司口碑哪家好

awk 是一个强大的文本处理工具,常用于数据提取、格式化和简单计算。
参数 说明
-F 或 --field-separator 指定字段分隔符,默认是空格或制表符。

awk -F: '{print $1}' /etc/passwd	
#打印 /etc/passwd 文件中每行的第一个字段(用户名)。

-v 或 --assign 为 awk 脚本定义变量。

awk -v var=10 '{print $1 + var}' file.txt	
# 将变量 var 设置为 10,并将文件中每行的第一个字段加上 10。

-f 或 --file 指定包含 awk 脚本的文件。

awk -f script.awk data.txt	
#执行 script.awk 中的脚本,处理 data.txt 文件。

-i 或 --include 包含一个 awk 库文件。

awk -i inplace '{print $0}' file.txt	
#使用 inplace 库直接修改文件内容(需要支持 -i inplace 的 awk 版本)。

-W 或 – 用于长选项,例如 --version。

awk --version	
#显示 awk 的版本信息。

|从标准输入读取数据。

cat file.txt | awk '{print $1}'
# 从标准输入读取数据并打印每行的第一个字段。

-e 或 --source 直接在命令行中指定 awk 脚本。

awk -e '{print $1}' file.txt	
#执行命令行中提供的脚本。

-E 或 --exec 执行一个 awk 脚本文件。

awk -E script.awk data.txt	
#执行 script.awk 文件中的脚本。

–posix 启用 POSIX 兼容模式。

awk --posix '{print $1}' file.txt	
#在 POSIX 兼容模式下运行 awk。

–lint 检查 awk 脚本中的语法错误。

awk --lint '{print $1}' file.txt	
#检查脚本中的语法错误。

–sandbox 启用沙箱模式,限制某些危险操作。

awk --sandbox '{print $1}' file.txt	
#在沙箱模式下运行 awk。

内置变量
$0 当前行的全部内容

awk '{print $0}' data.txt

$n 当前行的第 n 个字段

awk '{print $2}' data.txt

FS 字段分隔符,默认为空格或制表符。

awk 'BEGIN {FS=":"} {print $1}' /etc/passwd	
# 将字段分隔符设置为 :, 打印 /etc/passwd 中每行的第一个字段。

OFS 输出字段分隔符,默认为空格。

awk '{OFS=":"; print $1, $2}' file.txt	
#将输出字段分隔符设置为 :, 打印每行的前两个字段。

RS 输入记录分隔符,默认为换行符。

awk 'BEGIN {RS=":"} {print $0}' /etc/passwd
#将输入记录分隔符设置为 :, 按 : 分割记录。

ORS 输出记录分隔符,默认为换行符。

`awk '{ORS="	"} {print $0}' /etc/passwd`	
#将输出记录分隔符设置为 `, 每行输出后加 `。

NF 当前记录的字段数。

awk '{print NF}' file.txt	
#打印每行的字段数。

NR 当前记录的行号(从 1 开始)。

awk '{print NR, $0}' file.txt	
#打印每行的行号和内容。

FNR 当前文件中的行号(多文件时,每个文件从 1 开始)。

awk '{print FNR, $0}' file1.txt file2.txt	
#打印每个文件中每行的行号和内容。

FILENAME 当前正在处理的文件名。

awk '{print FILENAME, $0}' file.txt	
#打印当前文件名和每行内容。

ARGC 命令行参数的个数。

awk -v var=10 'BEGIN {print ARGC}'
1
#为什么 ARGC 是 1?
#awk 本身算作一个参数。
#-v var=10 是 awk 的选项,不算作独立参数。
#'BEGIN {print ARGC}' 是 awk 的脚本部分,也不算作独立参数。

ARGV 命令行参数的关联数组。

awk -v var=10 'BEGIN {for (i in ARGV) print i, ARGV[i]}'
0 awk

FIELDWIDTHS 用于指定固定宽度的字段分隔。它通常用于处理固定宽度格式的文件,而不是用分隔符分隔的文件。

cat 2.txt
12345678901234567890123456789012
ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDawk 'BEGIN {FIELDWIDTHS = "10 10 12"} {print $1, $2, $3}' 2.txt输出结果
1234567890 ABCDEFGHIJ ABCDEFGHIJAB
ABCDEFGHIJ ABCDEFGHIJ ABCDEFGHIJAB

内置函数
length(s) 返回字符串 s 的长度。

awk '{print length($0)}' file.txt

tolower(s) 将字符串 s 转换为小写。

awk '{print tolower($1)}' file.txt

toupper(s) 将字符串 s 转换为大写。

awk '{print toupper($1)}' file.txt

gsub(r, s, t) 将字符串 t 中所有匹配正则表达式 r 的部分替换为 s。

awk '{gsub(/aa/, "aa-aa"); print $0}' file.txt
#gsub 是 awk 中的一个函数,用于全局替换(替换每一行中所有匹配的模式)。
#/aa/ 是一个正则表达式,表示匹配字符串 "aa"。
#aa-aa" 是替换字符串,表示将匹配到的 "aa" 替换为 "aa-aa"。
#print $0 表示打印当前整行(包括替换后的结果)。

match(s, r) 返回字符串 s 中匹配正则表达式 r 的起始位置。

awk '{print match($0, "aa")}' file.txt
#match 是 awk 中的一个函数,用于在字符串中查找匹配的正则表达式。
#$0 表示当前整行的内容。
#"aa" 是要匹配的字符串。
#match 函数返回匹配字符串的起始位置(从 1 开始计数),如果未找到匹配项,则返回 0。

split(s, a, r) 将字符串 s 按照分隔符 r 分割,并将结果存储在数组 a 中。

awk 'BEGIN {split("a,b,c", arr, ","); for (i in arr) print arr[i]}'
#BEGIN 是 awk 的一个特殊块,表示在处理文件之前执行的代码。
#split 是 awk 的一个内置函数,用于将字符串分割成数组。
#参数说明:
#第一个参数 "a,b,c" 是要分割的字符串。
#第二个参数 arr 是存储分割结果的数组。
#第三个参数 "," 是分隔符,表示用逗号 , 分割字符串。
#for (i in arr) 是一个循环,用于遍历数组 arr 的每个元素。
#i 是循环变量,表示数组的索引。
#arr[i] 是数组中对应索引的值。
#print arr[i] 用于打印数组中的每个值。

index(s, t) 返回 s 中字符串 t 的第一个位置,索引从 1 开始,未找到返回 0

cat test.txt
hello world
awk is powerful
searching strings with index
示例 1:查找子字符串的位置
awk '
{pos = index($0, "world");print "Position of \"world\":", pos;
}' text.txt
结果
Position of "world": 7
Position of "world": 0
Position of "world": 0
示例 2:查找未找到的子字符串
awk '
{pos = index($0, "test");print "Position of \"test\":", pos;
}' text.txt
结果
Position of "test": 0
Position of "test": 0
Position of "test": 0
示例 3:查找多个子字符串
awk '
{pos1 = index($0, "searching");pos2 = index($0, "strings");print "Position of \"searching\":", pos1;print "Position of \"strings\":", pos2;
}' text.txt
结果
Position of "searching": 0
Position of "strings": 0
Position of "searching": 0
Position of "strings": 0
Position of "searching": 1
Position of "strings": 11

substr(s, p, n) 返回字符串 s 中从 p 开始长度为 n 的后缀部分
用法说明
substr(s, p, n):返回字符串 s 中从位置 p 开始长度为 n 的子字符串。
s:要操作的字符串。
p:起始位置(从 1 开始计数)。
n:子字符串的长度(可选)。
返回值:从位置 p 开始长度为 n 的子字符串;如果 p 超过字符串长度,返回空字符串。

cat test.txt
hello world
awk is powerful
substring example
示例 1:提取字符串的前几个字符
awk '{print substr($0, 1, 5)}' text.txt
结果
hello
awk i
subst
示例 2:提取字符串中间的部分
awk '{print substr($0, 7, 5)}' text.txt
结果
world
power
examp
示例 3:提取字符串末尾的部分
awk '{print substr($0, length($0) - 2, 3)}' text.txt
结果
rld
l
ple
说明:
length($0) 返回当前行的长度。
length($0) - 2 计算起始位置(从倒数第三个字符开始)。
substr($0, length($0) - 2, 3) 提取从起始位置开始长度为 3 的子字符串。

算术函数
atan2(y, x) 返回 y/x 的反正切值(弧度)。

awk 'BEGIN {print atan2(1, 1)}'
0.785398

cos(x) 返回 x 的余弦值(x 以弧度为单位)。

awk 'BEGIN {print cos(0)}'

sin(x) 返回 x 的正弦值(x 以弧度为单位)。

awk 'BEGIN {print sin(0)}'

exp(x) 返回 e 的 x 次方。

awk 'BEGIN {print exp(1)}'

log(x) 返回 x 的自然对数。

awk 'BEGIN {print log(10)}'

sqrt(x) 返回 x 的平方根。

awk 'BEGIN {print sqrt(16)}'

int(x) 返回 x 的整数部分。

awk 'BEGIN {print int(3.14)}'

rand() 返回 0 到 1 之间的随机数。

awk 'BEGIN {print rand()}'

srand([x]) 设置随机数生成器的种子,返回前一个种子值。

awk 'BEGIN {srand(123); print rand()}'

时间函数
mktime(date) 将日期字符串转换为时间戳(自1970年1月1日以来的秒数)。日期格式为 “YYYY MM DD HH MM SS”。

awk 'BEGIN {print mktime("2023 12 31 23 59 59")}'

strftime([format [, timestamp]]) 将时间戳格式化为字符串。默认使用当前时间。

awk 'BEGIN {print strftime("%Y-%m-%d %H:%M:%S")}'

systime() 返回当前时间的时间戳(自1970年1月1日以来的秒数)。

awk 'BEGIN {print systime()}'

特殊的模式块
BEGIN 参数
BEGIN 参数指定的代码块会在 awk 开始读取输入之前执行。它通常用于初始化变量、设置环境(如字段分隔符)或打印表头等操作。

awk 'BEGIN {FS=":"; OFS=","; print "Name,Age"} {print $1, $2}' data.txt
1. BEGIN 块
BEGIN 是 awk 的一个特殊块,表示在处理文件之前执行的代码。
FS=":":设置输入字段分隔符(Field Separator)为冒号 :。这意味着 awk 会将每一行按冒号分隔成多个字段。
OFS=",":设置输出字段分隔符(Output Field Separator)为逗号 ,。这意味着 awk 在输出时会用逗号分隔字段。
print "Name,Age":在处理文件之前,先打印一行标题 "Name,Age"2. 主处理块 {print $1, $2}
这是 awk 的主处理块,表示对每一行执行的操作。
$1 表示当前行的第一个字段。
$2 表示当前行的第二个字段。
print $1, $2 表示打印当前行的第一个和第二个字段,字段之间用输出字段分隔符(OFS)分隔。

END 参数
END 参数指定的代码块会在 awk 处理完所有输入之后执行。它通常用于总结性的操作,比如计算总和、平均值、统计次数等。

awk '{sum += $2} END {print "Total Age:", sum}' data.txt

示例:

cat data.txt
Alice:25
Bob:30
Charlie:35
$ awk -F ":" '{sum += $2} END {print "Total Age:", sum}' data.txt
Total Age: 901. awk
awk 是一个强大的文本处理工具,用于处理和操作文本文件。
2. {sum += $2}
这是 awk 的主处理块,表示对每一行执行的操作。
$2 表示当前行的第二个字段(列)。
sum 是一个用户定义的变量,用于累加每一行的第二个字段的值。
sum += $2 表示将当前行的第二个字段的值加到 sum 变量中。(等价于sum = sum + $23. END {print "Total Age:", sum}
END 是 awk 的一个特殊块,表示在处理完所有行之后执行的代码。
print "Total Age:", sum 表示打印字符串 "Total Age:"sum 变量的值,即所有第二列数值的总和。
4. data.txt
这是输入文件名,表示要处理的文件。

综合示例:
下面是一个综合使用 BEGIN 和 END 的示例,用于统计文件中某特定字符串出现的次数:

cat > domains.txt << EOF
tecmint.com
example.com
tecmint.com
google.com
tecmint.com
github.com
tecmint.com
wikipedia.org
tecmint.com
stackoverflow.com
EOF
awk '
BEGIN {count = 0;print "Counting occurrences of \"tecmint.com\":"
}
/^tecmint.com/ {count += 1;
}
END {print "Total occurrences:", count
}
' domains.txtCounting occurrences of "tecmint.com":
Total occurrences: 5解释:
BEGIN 块在 awk 开始处理文件之前执行。
count = 0:初始化一个变量 count,用于统计 tecmint.com 的出现次数。
print "Counting occurrences of \"tecmint.com\":":打印一条提示信息,表示开始统计。
主逻辑部分
每当遇到以 tecmint.com 开头的行时,执行大括号内的代码。
/^tecmint.com/:这是一个正则表达式模式,表示匹配以 tecmint.com 开头的行。
count += 1:每当匹配到一行,计数器 count 增加 1。
END 块在 awk 处理完所有行之后执行。
print "Total occurrences:", count:打印统计结果,显示 tecmint.com 的总出现次数。

获取nginx服务acess.log中今天10.30到11.30的日志,只要ip地址,url,状态码。


awk '$0 ~ /\[.*?:09:([3-5][0-9]):[0-9]{2} \+.*\]/ || $0 ~ /\[.*?:10:([0-2][0-9]|30):[0-9]{2} \+.*\]/' /var/log/nginx/access.log | cut -d " " -f 1,4-5,6-9

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com