使用日志文件的第7列的输出将gunzip文件发送到备份目录

时间:2018-02-05 23:52:38

标签: bash shell awk

如果批处理文件成功处理,我会打印一个日志文件。第3列显示失败的状态字母“F”或完成的“C”。第5列显示完整路径和批处理文件名。

批处理文件输出示例

392  02/04/2018:2:00  c  4444 /batchprocessing/abc.dat
444  02/04/2018:3:00  F  4442 /batchprocessing/mnop.dat  
3333 02/04/2018:4:00  c  2234 /batchprocessing/xyz.dat

我正在尝试从名为batch_status.log的日志文件第3列中压缩第5列中状态为“F”的所有文件

这就是我的想法:

cat batch_status.log | awk '{if ($3 == "F") gunzip -c name_of_file_from_5th_column.dat > /backup/batchfilebackups; else print "No Error";}'

2 个答案:

答案 0 :(得分:0)

我会在shell中使用while循环:

#!/bin/bash
while read -r f1 f2 f3 f4 f5 ; do
    if [ "${f3}" = "F" ] ; then
        gunzip -c "${f5}" >> /backup/batchfilebackups
    else
        # Whatever that means ...
        echo "No Error!"
    fi
done < batch_status.log

答案 1 :(得分:0)

首先你在这里遇到问题,gunzip用于解压缩而不是压缩,在这种情况下你应该使用gzip ...你没有指定,但我认为你想要压缩文件...使用以下命令:

for i in $(cat batch_status.log | awk '{if ($3 == "F") print $5}'); do cat $i >> backup; done; gzip backup