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

来源:互联网 发布:企业数据安全管理 编辑:程序博客网 时间:2024/06/03 04:36

背景

做了个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.gzls 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' "存在
 

 

0 0
原创粉丝点击