shell脚本在unix中逐行读取文件并更新文件中的行

时间:2016-09-28 14:38:08

标签: shell unix

我有一个由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

}

由于

1 个答案:

答案 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;处于状态。
  • 然后第三个字段标记为&#34;已处理&#34;。
  • 使用mv命令的最后一行将创建的新文件移动到 原始输入文件。
  • 正如我在帖子的评论中所指出的,应该注意system()的输出将打印在控制台上,文件的修改内容将被重定向到文件。