红联Linux门户
Linux帮助

awk来调用linux命令解决个日志采集问题

发布时间:2015-12-18 09:50:33来源:linux网站作者:coder_xia

背景

做了个web页面的日志查询工具,给用服同事使用,以应对服务器太多的困扰,需要将现网日志拿回来家里进行模拟。


问题

部件A有10台主机,将某小时内文件压缩为A_IP.tar.gz。每个tar.gz包解压后为201405291200.tar.gz这种包含具体日志文件的压缩包。问题是如A部件10台主机到本地后两台服务器上,解压总会有同名文件,简单重命名分钟是没法解决(最后的C++模块按照分钟取了压缩包的.前面的12位),因为压缩包2分钟一个(这个日志量是大了点啊)于是决定重命名解压后文件,将A_IP.tar.gz解压后将201405291200.IP.tar.gz形式。


解决

决定脚本实现,IP通过参数形式传递

#!/bin/bash 
#解压日志压缩包,重命名加上.ip格式 
tar xvf *$1.tar.gz 
ls 2014* |cat | awk -F "." '{ 
print "'${1}'" 
suffix=".tar.gz" 
filename=$1suffix 
newfilename=$1".""'$1'"suffix 
print newfilename 
system("mv "filename" "newfilename) 
}' 


需要注意的是:

1.awk调用linux命令使用类似C语言的system调用方式

2.system中,如果没有变量传递,直接system("touch hello.txt")即可,如果hello.txt是awk传递过去的如
awk '{ 
filename="hello.txt" 
... 
}' 

在system里就不用双引号括起来了,使用system("touch " filename),注意touch后留个空格,filename不用加$

3.awk要使用shell传过来的参数,如上,执行./hello.sh 89时,89作为$1传递过来 ,以" '$1' "存在。


awk实际应用:文本合并 :http://www.linuxdiyf.com/linux/13007.html

Linux正则表达式awk讲解:http://www.linuxdiyf.com/linux/11171.html

Linux脚本Bash中的文本利器-awk:http://www.linuxdiyf.com/linux/8468.html

Linux强大命令Awk 20分钟入门介绍:http://www.linuxdiyf.com/linux/8266.html

Linux文本处理工具之awk:http://www.linuxdiyf.com/linux/7146.html