0

我想编写一个 bash 脚本,它将获取日志文件的输出并将相关内容提取到另一个日志文件中,我将使用该脚本对发送文件所需的时间进行统计分析,例如:

内容如下:

FileSize  TimeStamp         MD5          Full Path to File
4824597   2013-06-21 11:26  5a264...c11  ...45/.../.../ITAM.xml 
4824597   2013-06-20 23:18  5a264...c11  ...48/.../.../1447_rO8iKD.TMP.ITAM.xml

我正在尝试提取时间戳和文件的完整路径

我是脚本初学者,但到目前为止我已经尝试过:

    cat "/var/log/Customer.log" | grep '2013* *11' >> test.txt 

我还缺少其他方法吗?非常感谢你。

4

5 回答 5

2

如果您想为所有条目提取时间戳和完整路径,那么这应该可以工作:

awk 'NR>1{print $2,$3,$NF}' inputFile > outputFile
于 2013-06-21T16:42:15.440 回答
2

GNU 的代码:

sed -nr '2,$ {s/\S+\s+(\S+)\s+(\S+)\s+\S+\s+(.*)/\1 \2\t\3/;p}' file

$猫文件
FileSize TimeStamp MD5 文件的完整路径
4824597 2013-06-21 11:26 5a264...c11 ...45/.../.../ITAM.xml
4824597 2013-06-20 23:18 5a264...c11 ...48/.../.../1447_rO8iKD.TMP.ITAM.xml

$sed -nr '2,$ {s/\S+\s+(\S+)\s+(\S+)\s+\S+\s+(.*)/\1 \2\t\3/;p}' 文件
2013-06-21 11:26 ...45/.../.../ITAM.xml
2013-06-20 23:18 ...48/.../.../1447_rO8iKD.TMP.ITAM.xml
于 2013-06-21T16:56:42.710 回答
1

看起来这是你想要的:

awk '$2 ~ /^2013/ && $4 ~ /11$/ { print $2, $3, $NF; }' /var/log/Customer.log > test.txt
  • $2 ~ /^2013/匹配从 2013 年开始的日期
  • $4 ~ /11$/匹配以 11 结尾的 MD5
  • print $2, $3, $NF打印字段 2(日期)、3(时间)和最后一个字段(路径名)

如果这些正则表达式让您感到困惑,请转到Regular-Expressions.info并阅读教程。

于 2013-06-21T16:24:30.420 回答
1

假设列是制表符分隔的,您可以使用cut

cut -f2,4 /var/log/Customer.log | grep -v MD5 >> test.txt

将第 2 列和第 4 列(从 1 开始计数)追加到test.txt. 包含的MD5行将被grep调用删除。

于 2013-06-21T16:29:11.680 回答
1

你可以这样做:

awk 'NR!=1 {print $2 " " $3 "\t" $5}' Customer.log > stat.txt
于 2013-06-21T16:35:52.287 回答