Кажется, что в моем файле снова и снова выписывается переменная linefix после оценки кода sed Status:
есть какие-нибудь идеи о том, что я сделал не так с вложением? Или это переменная "prior", которая устанавливается до while, а затем используется во вложенном операторе if? Установив для него строку Null, поскольку изначально у нас нет предыдущей строки, затем каждый раз, когда он находит дату, я выписываю предыдущую строку в надежде, что, когда я не найду дату в строке, я могу добавить ее в строку со значением статуса.
код: '' '
input="/var/log/alertError.log"
prior="NULL"
while IFS= read -r line ; do
if [[ $line =~ [0-9]{2}/[0-9]{2}/[0-9]{2} ]]; then
echo "$line" >> /var/log/alertErrorFinal.log
prior=$line
else
if [[ "$line" =~ 'Status:' ]]; then
linefix=$(sed -n -e 's/^.*\(Status: \)/\1/p')
priordate=$(echo "$prior" | awk -F'[][]' '{print $2}')
echo "$priordate $linefix" >> /var/log/alertErrorFinal.log
else
echo "$line" >> /var/log/alertErrorFinal.log
fi
fi
done < $input
' ''
Вывод:
'' '
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:Filtering out notification-only attributes.
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:Pumping XDS to ldap.
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:Performing operation status for .
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:
jcl/jclnt.log-DirXML Log Event -------------------
jcl/jclnt.log- Driver: \StarWars\system\Driver Set\AD-wookie
jcl/jclnt.log- Channel: Publisher
05/05/20 02:20:15.669 Status: Error
Status: Error
Status: Error
Status: Error
Status: Error
'' '
Ввод:' ''
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:Filtering out notification-only attributes.
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:Pumping XDS to ldap.
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:Performing operation status for .
jcl/jclnt.log-[05/05/20 02:20:15.669]:jclnt PT:
jcl/jclnt.log-DirXML Log Event -------------------
jcl/jclnt.log- Driver: \StarWars\system\Driver Set\AD-wookie
jcl/jclnt.log- Channel: Publisher
jcl/jclnt.log- Status: Error
'' '