一、从固定格式中取出IP所在的class,并列出
例:
class A {
    192.168.1.1
    192.168.2.1
    192.168.3.1
    192.168.169.69
}
class B {
    192.168.1.1
    192.168.169.69
}
sed -nr '/\{/{:1;N;/\}/!b1;/192.168.169.69/s#^([^{]+).*#\1#p}' file

awk -vRS='class *.' '/192.168.169.69/{print s}{s=RT}' file

sed -nr '/class/h;/192.168.169.69/{x;s#([^{]+).*#\1#p}' file

awk '/class/{s=$1" "$2}/192.168.169.69/{print s}' file


二、awk数组应用域替换

用shadow文件中的密文部分替换passwd中的"x",生一个新passwd文件

awk 'BEGIN{OFS=FS=":"} NR==FNR{a[$1]=$2}NR>FNR{$2=a[$1];print}' /etc/shadow /etc/passwd


NR==FNR,第一个文件shadow,以$1为下标,将$2的值赋给数组a
NR>FNR,第二个文件passwd,将文件shadow$2的值赋值给文件passwd



三、(next)使用

test.txt


gao    
20    
li    
23    
zhao    
25    
liu    
19    
zhang    
28   


隔行显示:

当记录行号除2等于1的时候就跳过该行,不会运行{print NR,$0},再重新读取下一行

awk 'NR%2==1{next}{print NR,$0}' test.txt二行合并:
awk 'NR%2==1{T=$0;next}{print  T,"\t"$0}' test.txt


其他用法汇总:

wKioL1YiZzfCovffAAJw0vEHIws210.jpg