1 .快速从主机名的得到ip地址:
- ping -q -c1 centos1 | awk '{print $3}' | sed -n 's/[()]//pg'
2. 现有文本文件日志:
游戏id 在线时常time QQ号码
6534 456 37354893
6500 056 564572105
6534 4156 37354893
6500 2456 564572100
……… ………
要求,写shell脚本对改文件按照第二列在线时常排序,然后,统计每个QQ号总共时长和。
解答:第一个问题好解决: sort -rnk2 就可以,第二个问题awk脚本如下,主要使用了关联数组:
- BEGIN{FS="\t"}
- {if($1 in time)
- time[$1]=time[$1]+$2
- else time[$1]=$2}
- END {for (i in time) print "the time of qq: "i"is "time[i]}
3. 删除一个文件的后几行?
两个方法:
head命令有这样的使用方法:
- [root@localhost shell]# cat t3
- hello
- im luojin
- where are you from ?
- im from aeirica
- oh,very good!
- tks
- [root@localhost shell]# head -n -2 t3 #负数代表不打印后n行
- hello
- im luojin
- where are you from ?
- im from aeirica
sed处理,先得到总行数,然后删除:
- [root@localhost shell]# cat t3
- hello
- im luojin
- where are you from ?
- im from aeirica
- oh,very good!
- tks
- [root@localhost shell]# sed "$(($(cat t3 | wc -l)-1)),\$d" t3 #处理方式,注意这是双引号
- hello
- im luojin
- where are you from ?
- im from aeirica
4.在一个文件开头添加内容:
方法有很多,cat、sed(i参数)、awk(BEGIN)都可以实现:
- [root@localhost shell]# cat t3
- hello
- im luojin
- where are you from ?
- im from aeirica
- oh,very good!
- tks
- [root@localhost shell]# echo "this is add" | cat - t3
- this is add
- hello
- im luojin
- where are you from ?
- im from aeirica
- oh,very good!
- tks
- [root@localhost shell]# sed "1i hello" t3
- hello
- hello
- im luojin
- where are you from ?
- im from aeirica
- oh,very good!
- tks
- [root@localhost shell]# sed "1i\hello" t3
- hello
- hello
- im luojin
- where are you from ?
- im from aeirica
- oh,very good!
- tks
- [root@localhost shell]# sed "1i"hello"" t3
- hello
- hello
- im luojin
- where are you from ?
- im from aeirica
- oh,very good!
- tks
- [root@localhost shell]# awk 'BEGIN{print "this is add"}1' t3
- this is add
- hello
- im luojin
- where are you from ?
- im from aeirica
- oh,very good!
- tks
5. 有一个文件cat abc
1 10
3 20
1 50
5 20
20 46
5 40
想实现这样的功能:
第一列按照1 3 5 10 20 排序,第二列进行求和.
如果第一列的值不存在,则第二列补充为0.
即最后想要的的结果是:
1 60
3 20
5 60
10 0
20 46
请教怎么解决?