我有一個由下面的java代碼編寫的日誌文件。shell腳本在unix中逐行讀取文件並更新文件中的行
<date>|<command>|<Error>
<date>|<command>|<Error>
<date>|<command>|<Error>
<date>|<command>|<Error>
我需要從線行至編寫一個腳本來回路線路和執行命令,並更新在同一個文件中的行=「加工」的狀態中。
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
}
感謝
把''變成'Processed'之前,它的舊值是多少?除非它至少與新狀態一樣長(例如「未處理」),否則你不能在原地進行更改;較長的狀態會覆蓋文件下一行的內容。另外,讀取一條線,尋找一條線,並在shell中寫一行是非常困難的。所以,你寫給'同一個文件'的大綱方法在shell中基本上是有致命缺陷的。這在C語言或類似的語言中會很棘手;如果長度條件滿足,它可以完成,但它可能不是一個好主意。您應該將信息複製到新文件。 –
歡迎來到Stack Overflow!請[編輯]你的問題,以顯示[你迄今爲止所嘗試的](http://whathaveyoutried.com)。您應該包含您遇到問題的代碼[mcve],然後我們可以嘗試幫助解決特定問題。你還應該閱讀[問]。 –