1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| 演示文本: hello awk1 awk2 awk3 hello awk4 awk5 awk6 Hello awk7 awk8 awk9
命令格式 awk [参数] '[ 动作]' [文件名] 常见参数: -F 指定列的分隔符 -f 调用脚本 -v 定义变量 常见动作: print 显示内容 $0 显示当前行所有内容 $n 显示当前行的第n列内容 动作组成 BEGIN{ 命令 } 初始代码块,主要和变量相关 /pattern/{ 命令 } 匹配、执行代码块 END{ 命令 } 结束代码块,主要和信息输出相关 内置变量 FILENAME 当前输入文件的文件名,该变量是只读的 NR 指定显示行的行号 NF 输出当前行的列数 OFS 输出格式的列分隔符,缺省是空格 FS 输入文件的列分融符,缺省是连续的空格和Tab
例子: awk '/hello/' awk.txt //查看包含hello的行内容 awk '{print $2}' awk.txt //查看第2列内容 awk '/Hello/{print $3}' awk.txt //查看包含Hello的第3列内容 awk '{print NR,$3}' awk.txt //查看第3列内容并显示行号 awk 'NR==2{print $3}' awk.txt //查看第2行的第3列内容 awk 'NR==2{print substr($3,4,1)}' awk.txt //查看第2行的第3列中的5数字 - substr(内容,起始位置,数量) --- 截取 + 综上所运用的方法都是基于 默认以 空格 作为分隔符
awk -F ',' '{print $2}' awk.txt //以,作为分隔符输出第2列的内容 awk -F ',' 'BEGIN{OFS="-----"}{print NR,$3}' awk.txt //设置显示分隔符为-----
ll | awk '{if ($5>=1910) print "\n" "filename:" $9 "\n" "lenth:" $5 "B" "\n"}' filename:initial-setup-ks.cfg lenth:1949B #输出当前目录下文件大小大于1910的文件名和文件大小
ll | awk '{if ($5>=1910 && /^-/) print "\n" "filename:" $9 "\n" "lenth:" $5 "B" "\n"}' filename:initial-setup-ks.cfg lenth:1949B #输出当前目录下普通文件大小大于1910的文件名和文件大小
+ 查询UID为0的用户/GID为10的组 awk -F ':' '$3==0{print $1}' /etc/passwd awk -F ':' '$3==10{print $0}' /etc/group
+ 查询空密码的用户 awk -F ':' '$2 == "" {print $1}' /etc/shadow awk -F ':' 'length($2)==0{print $1}' /etc/shadow
|