Linux基础——awk工具
1、awk删选ip字段,通过cut打印ip
# awk截取字段,分隔符管道符“|”左边为第一个打印字符
# cut截取字段,分隔符双引号“"”左边为第一个打印字符
脚本展示:
#!/bin/bash cat /root/ip.txt | grep "10.139" | awk -F'|' '{print $6}' | cut -d '"' -f8
# awk删选ip及掩码字段,cut通过“/”作为分隔符打印第一列
[root@Harbor tmp]# ip a | grep ens33 | awk -F' ' '{print $2}' | cut -d '/' -f1 ens33: 192.168.177.140
2、查找包含字符sshd行,通过“xargs -L”传参右侧echo指令按1列打印
ps -ef | grep sshd | awk '{print $2}' | xargs -L 1 echo

# 左边echo输出字符串,通过xargs -I {}指定传参位置“{}”
echo "file1 file2 file3" | xargs -I {} echo "processing {}"

3、打印第3行、第5行及以后的行,匹配第9列小于70的行并升序排列;
sar -u -f .var/log/sa/sa02 | awk -F ' ' 'NR==3 {print} NR>=5 && $1!="Average:" && $9 <70 {print} ' |sort -n -k 4| more

注意:
语法报错:awk命令行模块间,以单引号''作为字符分隔符;在单个模块内,以双引号“”作为分隔。
4、双引号无效输出,{}两边使用双引号不生效

5、print跟随双引号才能添加所需字符

6、删选第三列插入字符$3="e f g"

7、删除行首和行尾的空格、分隔符的空白部分,并每列首字母对齐
awk 'BEGIN{OFS="\t"}{$1=$1;print}' awk_txt

8、删选除lo网卡以外的所有ipv4地址
ifconfig | awk '/inet / && !($2 ~ /^127/){print $2}'

9、删选除lo字符以外第六列的ip字符
ifconfig | awk 'BEGIN{RS=""}!/lo/{print $6}'

10、“-F”选定分隔符,通过!arr[$1]选定第一列去重
awk -F" " '!arr[$1]++{print}' text.txt

11、打印TCP连接数量
# 打印tcp连接状态,匹配从左往右tcp字符串行并计数存入arr[]数组打印,
netstat -tnap |awk '
/^tcp/{
arr[$6]++
}
END{
for(state in arr){
print state ": " arr[state]
}
}
'
LISTEN: 7
ESTABLISHED: 1
# 或
netstat -tnap | awk '/^tcp/{arr[$6]++} END{for(state in arr){print state ":" arr[state]}}'
# 拓展——查找某列中包含的sshd字符串计数并打印
netstat -tnap | awk '/sshd/{arr[$7]++} END{for(state in arr){print state ":" arr[state]}}'

12、awk加入比较(大于、等于、小于、大于等于、小于等于)
# 大于
sar -r | awk '$9 > 1020992 {print $N}'
# 等于
# 小于
# 大于等于
# 小于等于
# 不等于
# 大于和小于
sar -r | awk '$9 > 1020992 || $9 < 100 {print $N}' | sort -rk 9
# 加入if语句
13、awk磁盘容量消耗单位换算
du -shb /root/bclinux/product/* | awk '{i = $1;size = i/1024/1024/1024;sum = sum + size} END{print sum "GB"}'
稳步前行,只争朝夕。
浙公网安备 33010602011771号