我有一个由java代码编写的日志文件,如下所示。
<date>|<command>|<Error>
<date>|<command>|<Error>
<date>|<command>|<Error>
<date>|<command>|<Error>
我需要编写一个脚本来逐行循环并执行命令并更新同一文件中行的status =“Processed”。
AutoTrigger()
{
echo "`date`: Checking the status of the files . Please wait..."
if [[ -s /tmp/samplefilelog.log ]] ; then
cat /tmp/samplefilelog.log | while read LINE
do
echo "LINE:" $LINE
LINE1=`echo $LINE | grep -v Processed`
echo "LINE1:" $LINE1
Command=`echo $LINE1 | cut -d "|" -f3`
echo "command:" $Command
$Command >> /tmp/Processinglogs.txt
printf $LINE | awk 'BEGIN{FS=OFS="|"}{$4="Processed";print}'
cat /tmp/samplefilelog.log
done
fi
}
由于
答案 0 :(得分:2)
你可以试试这个:
#!/bin/bash
awk -F"|" 'BEGIN{ OFS="|"}{
if ($3 ~ "Error"){
system($2);
$3="Processed";
}
print $0 > "/tmp/logfile.new";
}' logfile
mv /tmp/logfile.new logfile
system()
的awk
将执行第二个命令
字段(由|
分隔)如果第三个字段有&#34;错误&#34;处于状态。mv
命令的最后一行将创建的新文件移动到
原始输入文件。system()
的输出将打印在控制台上,文件的修改内容将被重定向到文件。