我想编写一个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
我正在尝试将 TimeStamp 和完整路径提取到文件中。
我是脚本编写的初学者,但到目前为止我已尝试过:
cat "/var/log/Customer.log" | grep '2013* *11' >> test.txt
我还缺少其他方法吗?非常感谢你。
答案 0 :(得分:2)
如果要为所有条目提取TimeStamp和Full Path,那么这应该有效:
awk 'NR>1{print $2,$3,$NF}' inputFile > outputFile
答案 1 :(得分:2)
GNU代码sed:
sed -nr '2,$ {s/\S+\s+(\S+)\s+(\S+)\s+\S+\s+(.*)/\1 \2\t\3/;p}' file
$cat file 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 $sed -nr '2,$ {s/\S+\s+(\S+)\s+(\S+)\s+\S+\s+(.*)/\1 \2\t\3/;p}' file 2013-06-21 11:26 ...45/.../.../ITAM.xml 2013-06-20 23:18 ...48/.../.../1447_rO8iKD.TMP.ITAM.xml
答案 2 :(得分:1)
看起来这就是你想要的:
awk '$2 ~ /^2013/ && $4 ~ /11$/ { print $2, $3, $NF; }' /var/log/Customer.log > test.txt
$2 ~ /^2013/
匹配从2013年开始的日期$4 ~ /11$/
匹配以11 print $2, $3, $NF
打印字段2(日期),3(时间)和最后一个字段(路径名)如果这些正则表达式让您感到困惑,请转到Regular-Expressions.info并阅读教程。
答案 3 :(得分:1)
假设列以制表符分隔,您可以使用cut
:
cut -f2,4 /var/log/Customer.log | grep -v MD5 >> test.txt
会将第2列和第4列(从1开始计数)追加到test.txt
。包含MD5
的行将被grep
调用删除。
答案 4 :(得分:1)
你可以这样做:
awk 'NR!=1 {print $2 " " $3 "\t" $5}' Customer.log > stat.txt