1.使用ifconfig取出网卡eth0的ip地址
方法1:[root@puyang~]# ifconfig eth0 |sed -n '2p' |sed 's#^.*addr:##g'|sed 's# B.*$##g'
192.168.142.133
方法2:cut
[root@puyang ~]# ifconfig eth0|grep 'inet addr'|cut -d ":" -f2|cut -d " " -f1
192.168.142.133
方法3:普通awk 使用2遍
[root@puyang ~]# ifconfig eth0|grep 'inet addr'|awk -F ":" '{print $2}'|awk '{print $1}'
192.168.142.133
方法4:awk同时多分隔符法
[root@puyang ~]# ifconfig eth0|grep 'inet addr'|awk -F '[ :]' '{print $13}'
192.168.142.133
方法5:awk同时多分隔符法
[root@puyang ~]# ifconfig eth0|sed -n '2p'|awk -F '[ :]+' '{print $4}'
192.168.142.133
[root@puyang ~]# ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}'
192.168.142.133
方法6:sed(正则)
[root@puyang ~]# ifconfig eth0 |sed -nr '2s#^.*dr:(.*) B.*$#\1#gp'
192.168.142.133
方法7:grep-perl正则方法
[root@puyang ~]# ifconfig eth0|grep -Po '(?<=dr:)[0-9.]+'
192.168.142.133
2.awk累计相加
假如现在有个文本,格式如下:a 1
b 3
c 2
d 7
b 5
a 3
g 2
f 6
d 9
即左边是随机字母,右边是随机数字,要求写个脚本使其输出格式为:
a 4
b 8
c 2
d 16
f 6
g 2
即将相同的字母后面的数字加在一起,按字母的顺序输出。
答案:
awk '{h[$1]=h[$1]+$2}END{for(pol in h)print pol,h[pol]}' array_add.txt
演示:
[root@show awkfile]# awk '{h[$1]=h[$1]+$2}END{for(pol in h)print pol,h[pol]}' array_add.txt
a 4
b 8
c 2
d 16
f 6
g 2
过程详解:
第一个里程碑-把第二列的数字的总和
[root@show awkfile]# cat array_add.txt
a 1
b 3
c 2
d 7
b 5
a 3
g 2
f 6
d 9
[root@show awkfile]# awk '{sum=sum+$2}END{print sum}' array_add.txt
38
第二个里程碑-选择什么作为房间号码
这里只有两列,第一列是字母,第二列是数字是我们要相加的东西。这里我们选择第一列作为房间号码即元素名称。
第三个里程碑-遇到相同的字母再相加
这里就需要用到了awk数组的内容。
sum=sum+$2 这里把sum换成awk数组即可。
[root@puyang~]# awk '{h[$1]=h[$1]+$2}' array_add.txt
没有显示任何过程,不是很好。我们看看他到底如何处理的。一步一步来分析。注意这里我们只关注一个房间a,大家熟练后再同时看多个房间的内容。
[root@puyang~]# awk '{h[$1]=h[$1]+$2;print "当前行内容:"$0,"a房间内容:"h["a"]}' array_add.txt
当前行内容:a 1 a房间内容:1
当前行内容:b 3 a房间内容:1
当前行内容:c 2 a房间内容:1
当前行内容:d 7 a房间内容:1
当前行内容:b 5 a房间内容:1
当前行内容:a 3 a房间内容:4
当前行内容:g 2 a房间内容:4
当前行内容:f 6 a房间内容:4
当前行内容:d 9 a房间内容:4
我们只关注a房间的内容及h["a"]的内容
行号 当前行的内容 $1的内容 $2的内容 h["a"]之前的内容 h["a"]=h["a"]+$2h["a"]之后的内容
1 a 1 a 1 空h["a"]=空+11
2 b 3 b 3 1不是a房间,不进行计算,h["a"]内容还是11
3 c 2 c 2 1不是a房间,不进行计算,h["a"]内容还是11
4 d 7 d 7 1不是a房间,不进行计算,h["a"]内容还是11
5 b 5 b 5 1不是a房间,不进行计算,h["a"]内容还是11
6 a 3 a 3 1h["a"]=1+34
7 g 2 g 2 4不是a房间,不进行计算,h["a"]内容还是14
8 f 6 f 6 4不是a房间,不进行计算,h["a"]内容还是14
9 d 9 d 9 4不是a房间,不进行计算,h["a"]内容还是14
似曾相识的表格呀,我看结合这个表格看看执行过程。
首先读取第一行:
$1内容是a,$2内容是1,这里我们也创建了数组h[$1],我们要计算h[$1]=h[$1]+$2,即h["a"]=空+1.此时h["a"]的内容是1.
然后读取第二行:
$1内容是b,不是我们要的a房间我们跳过,此时h["a"]的内容依然是1
继续往下读情况都是一样的直到读取到第六行
$1内容是a,$2内容是3,这里我们也创建了数组h[$1],我们要计算h[$1]=h[$1]+$2,即h["a"]=1+4.此时h["a"]的内容是4.
awk继续往下读取直到读取到最后一行$1都不是a,所以h["a"]房间的内容不会发生变化。
现在大家再看一下执行过程,注意我们只关注h["a"]房间的内容。
[root@spuyang~]# awk '{h[$1]=h[$1]+$2;print "当前行内容:"$0,"a房间内容:"h["a"]}' array_add.txt
当前行内容:a 1 a房间内容:1
当前行内容:b 3 a房间内容:1
当前行内容:c 2 a房间内容:1
当前行内容:d 7 a房间内容:1
当前行内容:b 5 a房间内容:1
当前行内容:a 3 a房间内容:4
当前行内容:g 2 a房间内容:4
当前行内容:f 6 a房间内容:4
当前行内容:d 9 a房间内容:4
这时候你应该理解他到底如何执行的了。
3.将一个文本的奇数行和偶数行合并
方法一:sed版本[root@puyang ~]# sed 'N;s#\n# #g' 0324-join.txt
方法二:xargs初级版
[root@puyang ~]# xargs -n14 <0324-join.txt
方法三:xargs升级版
[root@puyang ~]# xargs -d "\n" -n2 <0324-join.txt
方法三:awk方法
[root@puyang ~]# awk '{lastline=$0;getline;print lastline,$0}' 0324-join.txt
方法四:awk-getline升级版
[root@puyang ~]# awk '{getline lastline;print lastline,$0}' 0324-join.txt
方法五:paste-sd参数
[root@puyang ~]# paste -sd " \n" 0324-join.txt
方法六:
[root@puyang ~]# paste -d " " - - <0324-join.txt
方法七:判断奇偶行并显示
[root@puyang ~]# awk '{if(NR%2==0) print $0; else printf $0" "}'
方法八:判断奇偶行显示-升级版
[root@puyang ~]# awk '{printf NR%2?$0:$0"\n"}' 0324-join.txt
方法九:
[root@puyang ~]# awk 'NR%2==1{line=$0;next}{print line,$0}' 0324-join.txt
方法十:
[root@puyang ~]# awk 'ORS=NR%2==0?"\n":" "' 0324-join.txt