做网站语言最好,网站图片特效代码,如何在已建设好的网站做修改,中小企业网络构建官方文档#xff1a;https://www.gnu.org/software/gawk/manual/gawk.html 什么是awk#xff1f;
Awk是一种文本处理工具#xff0c;它的名字是由其三位创始人#xff08;Aho、Weinberger和Kernighan#xff09;的姓氏首字母组成的。Awk的设计初衷是用于处理结构化文本数… 官方文档https://www.gnu.org/software/gawk/manual/gawk.html 什么是awk
Awk是一种文本处理工具它的名字是由其三位创始人Aho、Weinberger和Kernighan的姓氏首字母组成的。Awk的设计初衷是用于处理结构化文本数据它提供了强大的模式匹配和数据提取功能。
Awk的工作方式是逐行扫描输入文本文件并对每一行应用一组用户定义的规则。这些规则由模式-动作对构成当文本行匹配某个模式时对应的动作将被执行。Awk将输入文本自动分割成字段默认以空格作为分隔符可以方便地对字段进行操作和处理。
语法格式
awk pattern { action } input_file
pattern是用于匹配文本行的条件。可以是正则表达式、比较表达式、逻辑表达式等。如果省略pattern则默认匹配所有行。{ action }是在匹配成功时执行的动作块。可以是一条或多条语句用花括号 {} 包围。如果省略动作块将默认执行打印整行的操作。input_file是要处理的输入文件。如果省略此参数则从标准输入读取数据。 常见要点
字段和字段分隔符
默认情况下Awk将每一行分割成多个字段字段之间以空格或制表符作为分隔符。可以使用-F选项指定不同的字段分隔符。例如-F ,表示使用逗号作为分隔符。可以使用$1、$2等表示第1、第2个字段$0表示整行。
内置变量
NR表示当前处理的行数。NF表示当前行的字段数量。FNR表示当前文件中的行数。FILENAME表示当前处理的文件名。
控制流语句
if-else条件语句根据条件执行不同的动作。for循环语句迭代执行一系列动作。while循环语句在满足条件的情况下重复执行一系列动作。do-while循环语句先执行一系列动作然后根据条件重复执行。
内置函数
Awk提供了许多内置函数可用于字符串处理、数学运算、日期处理等。例如length()、substr()、tolower()、toupper()、sin()、cos()等。
输出打印
使用print语句将结果输出到标准输出。可以打印文本、变量、表达式等。使用printf函数以格式化的方式打印输出。
示例
-- 使用Awk来统计文件中的行数
awk { count } END { print count } input.txt-- 使用Awk计算一个CSV文件中某一列的总和
awk -F , { sum $3 } END { print sum } data-- 使用Awk从日志文件中提取特定时间段内的日志记录
awk /Jun 15 10:30:00/, /Jun 15 11:00:00/ access.log-- 使用Awk计算一个文本文件中每个单词的出现次数
awk { for(i1; iNF; i) count[$i] } END { for(word in count) print word, count[word] } text.txt-- 使用正则表达式匹配包含数字的行
awk /[0-9]/ input.txt-- 计算每行字段数量并打印行号和字段数量
awk -F , { print Line, NR, has, NF, fields } data.csv-- 打印文件名和行号
awk { print File:, FILENAME, Line:, NR, $0 } file1.txt file2.txt-- 使用if-else条件语句来根据条件执行不同的动作
awk { if ($1 10) print $1, is greater than 10; else print $1, is less than or equal to 10 } data.txt-- 使用for循环语句打印九九乘法表
awk BEGIN { for(i1; i9; i) { for(j1; ji; j) printf(%d*%d%d , j, i, i*j); print } }-- 使用length()函数获取每行的字符数
awk { print Line, NR, has, length($0), characters } data.txt-- 使用substr()函数截取字段的子字符串
awk -F , { print Name:, $1, Initials:, substr($1, 1, 1) substr($2, 1, 1) } names.csv-- 使用print语句打印文本和变量
awk { name $1; age $2; print Name:, name, Age:, age } data.txt-- 使用printf函数以格式化的方式打印输出
awk { printf Name: %-10s Age: %2d\n, $1, $2 } data.txt-- 删除temp文件的重复行
awk !($0 in array) { array[$0]; print } temp-- 查看最长使用的10个命令
awk {print $1} ~/.bash_history | sort | uniq -c | sort -rn | head -n 10-- 查看机器的ip列表
ifconfig -a | awk /Bcast/{print $2} | cut -c 5-19-- 查看机器的每个远程链接机器的连接数
netstat -antu | awk $5 ~ /[0-9]:/{split($5, a, :); ips[a[1]]} END {for (ip in ips) print ips[ip], ip | sort -k1 -nr}-- 查看某个进程打开的socket数量
ps aux | grep [process] | awk {print $2} | xargs -I % ls /proc/%/fd | wc -l-- 批量重命名文件
find . -name *.jpg | awk BEGIN{ a0 }{ printf mv %s name%01d.jpg\n, $0, a } | bash-- 查看某个用户打开的文件句柄列表
for x in ps -u 500 u | grep java | awk { print $2 };do ls /proc/$x/fd|wc -l;done-- 计算文件temp的第一列的值的和
awk {s$1}END{print s} temp-- 查找某个时间戳的文件列表
cp -p ls -l | awk /Apr 14/ {print $NF} /usr/users/backup_dir-- 格式化输出当前的进程信息
ps -ef | awk -v OFS\n { for (i8;iNF;i) line (line ? line FS : ) $i; print NR :, $1, $2, $7, line, ; line }-- 查看输入数据的特定位置的单个字符
echo abcdefg|awk BEGIN {FS} {print $2}-- 打印当前的ssh客户端
netstat -tn | awk ($4 ~ /:22\s*/) ($6 ~ /^EST/) {print substr($5, 0, index($5,:))}-- 打印文件第一列不同值的行
awk !array[$1] file.txt-- 打印第二列唯一值
awk { a[$2] } END { for (b in a) { print b } } file-- 查看系统所有分区
awk {if ($NF ~ ^[a-zA-Z].*[0-9]$ $NF !~ c[0-9]d[0-9]$ $NF !~ ^loop.*) print /dev/$NF} /proc/partitions-- 查看2到100所有质数
for num in seq 2 100;do if [ factor $num|awk {print $2} $num ];then echo -n $num ;fi done;echo-- 查看第3到第6行
awk NR 3 NR 6 /path/to/file 分享、在看与点赞只要你点我们就是胖友
来自: Linux文本处理三剑客之awk命令https://mp.weixin.qq.com/s?__bizMzk0NTQ3OTk3MQmid2247487424idx1sn53c4b2333d8e6e42831ad1e362040251chksmc315878cf4620e9abca074f1c66d97750c0587b487c51df45d41e664ceb7435ebbfe3869fae9token355315523langzh_CN#rd