df -h | cut -d ‘ ‘ -f 5 空格键作为分隔符,cut不能使用
格式:awk ‘条件1{动作1} 条件2{动作2}’ 文件名
awk ‘{printf $2“\t" $6"\n”}’student.txt $2第二列,$6第6列 无条件执行
df -h | awk ‘{printf $1”\t” $5”\t” $6”\n”}’ print命令自带换行符 「 $0 整行、$1第一列、$2 第二列 」
df -h | grep sda5 | awk ‘{print $5}’ | cut -d “%” -f 1
awk ‘BEGIN{print “test !!"} {print $2 “\t” $4}’ student.txt BEGIN在awk开始前执行
awk ‘BEGIIN{FS=“:"} {print $1 “\t” $3}’ /etc/passwd 「 FS指定分隔符 & -F 」
awk ‘BEGIN{FS=“:”} END{print “aaaa"}{print $1”\t” $3}’ /etc/passwd
awk ‘BEGIN{FS=“:”;print “start…"} END{print “END…"} {print $1“\t” $3}’ /etc/passwd END程序结束时执行
cat student.txt | grep -v Name | awk ‘$4 >=87 {print $2}’ 逻辑判断
cat student.txt | grep -v ‘ID’ | awk ‘/2/{print}’ 打印匹配2行
awk -F ":" ‘{print $1"\t" $3}’ /etc/passwd 指定分隔符
# 筛选第四列 > 500
awk 'BEGIN {print "开始"} $4 > 500 {printf $0 "\t" $1 "\t" $2 "\t" $3 "\t" $4 "\t" $5 "\t" $6 "\t" $7 "\n"} END {print "结束"}’ student.txt
awk '/judy/ {print $1}' student.txt 「 /字符串匹配/」
df -h | awk '/dev\/disk[12]s[14]/ {print $1 "\t" $5}'
# printf命令,AWK专用
printf '输出格式’ 输出内容
%ns 字符串,n表示几个字符
%ni 正数
%m.nf 浮点数
\n 换行
\r 回车即Enter键
\t 水平输出Tab键
\v 垂直输出Tab键
printf %s 1 2 3 4 5 6
printf '%s %s %s\n' 1 2 3 4 5 6
printf ‘%s’ $(cat student.txt) 输出student.txt的内容
printf ‘%s\t %s\t %s\t %s\n’ $(cat student.txt)4列
printf ‘%s\t %s\t %s\t %s\n’ $(cat student.txt | grep -v ID) 去除首行
print命令 Linux中没有
awk '/root/' /etc/passwd 「 pattern 」
awk -F ':' '/root/ {print $7}' /etc/passwd 「 pattern {action} & -F 分隔符 」
awk -F ':' '{print "文件名:" FILENAME ",行号:" NR ",列数:" NF ",内容:" $0}' passwd
-
-F 分隔符
-
FILENAME 文件名
-
NR 行号
-
NF 行列数 $NF最后列
-
$0 行内容
awk -F ':' 'NR==2 {print "filename:" FILENAME,$0}' passwd 「 打印第二行 」
ls -Fl | awk '/^d/'
awk -F ':' '{print $1}' passwd 「 第一列 」
awk -F ':' '{print $NF}' passwd 「 最后列 」
awk -F ':' '{print $NF-1}' passwd 「 倒数第二列 」
awk -F ':' '{ if(NR <5 && NR >2) print $1}’ passwd 「 打印3,4行的第一列 」
awk -F '[:/]' '{print $0,$NF}' passwd 「 多分隔符」
awk -F ':' 'BEGIN {print "Start..."} {print $0,$1,$NF} END{print "End..."} ' passwd 「 BEGIN END 嵌套 」
last | awk '{print $3}’
ls -lF | awk '{if($5 > 102400) {count++;sum+=$5}} {print count,sum}’ 「 局部变量 」
ls -lF | awk '{if($5 > 102400) print $NF,$5}’ 「 >100k 的文件 」
awk -F ':' '{count++;} END{print count}' /etc/passwd 「 统计行」
# 获取IP
ifconfig eth0 | awk -F '[ ]+' '{if(NR==2) print $3}’ 「 指定多个空格为分隔符 」
# 登录最多的IP
last | awk '{S[$3]++} END{for(a in S) print S[a],a}' | uniq | sort -rh