2026/5/23 14:06:27
网站建设
项目流程
遨游网站建设有限公司,网站建设项目的工作分解,做网站好还是小程序好,北京模板网站建设在Bash中#xff0c;使用awk切分输出有多种方式。这里示例几种常见的使用方法。1 基本字段切割1.1 按空格/制表符分隔# 显示第一列
echo apple banana cherry | awk {print $1}# 显示第一列和第三列
echo apple banana cherry date | awk {print $1, …在Bash中使用awk切分输出有多种方式。这里示例几种常见的使用方法。1 基本字段切割1.1 按空格/制表符分隔# 显示第一列echo apple banana cherry | awk {print $1}# 显示第一列和第三列echo apple banana cherry date | awk {print $1, $3}# 显示最后一列echo apple banana cherry | awk {print $NF}# 显示倒数第二列echo apple banana cherry date | awk {print $(NF-1)}1.2 指定分隔符# 使用 -F 指定分隔符echo apple,banana,cherry | awk -F, {print $2}# 多个分隔符正则表达式echo apple;banana:cherry | awk -F[;:] {print $1, $3}# 输出时指定分隔符OFSecho apple banana cherry | awk BEGIN{OFS:} {print $1, $2, $3}2 按列宽切割即按固定宽度切割# 使用 substr 函数 echo 12345ABCDE | awk {print substr($0, 1, 5), substr($0, 6, 5)} # 更复杂的例子 data20240101文件1.txt echo $data | awk { date substr($0, 1, 8) name substr($0, 9) print 日期:, date, 文件名:, name }3 处理复杂文本# 示例文本 cat EOF data.txt John:Doe:25:New York Jane:Smith:30:Los Angeles Bob:Johnson:35:Chicago EOF # 按冒号分隔重新格式化输出 awk -F: {print 姓名:, $1, $2, 年龄:, $3, 城市:, $4} data.txt # 条件筛选 切割 awk -F: $3 30 {print $1 is older than 30} data.txt输出示例如下所示姓名: John Doe 年龄: 25 城市: New York姓名: Jane Smith 年龄: 30 城市: Los Angeles姓名: Bob Johnson 年龄: 35 城市: ChicagoBob is older than 304 高级切割技巧# 跳过前N行 ls -la | awk NR 3 {print $9} # 使用正则表达式匹配分隔 echo apple-123-orange-456 | awk {split($0, a, /[0-9]/); print a[1], a[2]} # 多字段重新组合 echo 2023-12-25 | awk -F- {print 年月日:, $3/$2/$1}5 常用实际案例5.1 分析系统进程# 获取前5个内存使用最多的进程 ps aux | sort -rnk 4 | head -5 | awk {print 进程:, $11, 内存:, $4%}5.2 分析日志文件# 统计IP访问次数 cat access.log | awk {print $1} | sort | uniq -c | sort -rn5.3 CSV文件处理# 处理CSV文件 awk -F, BEGIN {OFS\t} {print $1, $3, $5} data.csv5.4 提取特定模式# 提取email地址 echo 联系我: testexample.com 或 adminsite.org | \ awk { for(i1; iNF; i) if($i ~ //) print Email found:, $i }6 使用内置变量# NF: 字段数 echo a b c d e | awk {print 字段数:, NF} # NR: 行号 awk {print 行号, NR, :, $0} data.txt # FS: 输入字段分隔符 # OFS: 输出字段分隔符 awk BEGIN{FS:; OFS|} {print $1, $3} data.txt7 一行命令实用例子# 获取磁盘使用率 df -h | awk /\/dev\/sd/ {print 磁盘, $1, 使用率:, $5} # 计算文件总大小 ls -l *.txt | awk {sum $5} END {print 总大小:, sum/1024, KB} # 提取URL域名 echo https://www.example.com/path | awk -F/ {print $3}8 结合其他命令使用# 与 cut 对比awk更灵活 echo a:b:c:d | cut -d: -f2 # 使用cut echo a:b:c:d | awk -F: {print $2} # 使用awk # 与 sed 结合 echo namevalue;age30 | sed s/;/\n/g | awk -F {print $1}需要注意的是在使用awk时使用 -F 指定输入分隔符使用 OFS 控制输出分隔符$0 表示整行$1、$2 等表示各字段NF 是字段总数NR 是当前行号可以使用正则表达式作为分隔符简单列提取用awk默认空格分隔固定宽度用substr复杂分隔用-F指定分隔符。reference---