sed -i 's/^ /0/' inputfile
而且這樣的:無法理解此sed命令。任何人都可以解釋它?
awk '{if (previoustime>$1)
{{system("getDate")}{system("printTimestamp")}{print ""}}
{previoustime=$1}
{print $0}
}' inputfile
在上面的腳本,GETDATE將在臨時文件到第二天printTimestamp更新時間戳將打印以下行與另一個更新的時間戳文件:
00:00:01 (lmgrd) TIMESTAMP <Date>
- 在第一個腳本,以後有什麼做的兩個空間'tux'是什麼意思?
- 在第二個腳本中,$ 1表示第一列,這裏輸入文件中的第一列是時間。它如何比較兩次?
下面是輸入文件格式:
21:49:32 (lmgrd) MLM using TCP-port 37034
21:51:08 (MLM) TCP_NODELAY NOT enabled
3:49:30 (lmgrd) TIMESTAMP 5/18/2014
3:54:33 (MLM) TIMESTAMP 5/18/2014
9:49:30 (lmgrd) TIMESTAMP 5/18/2014
9:59:37 (MLM) TIMESTAMP 5/18/2014
getMonthDays() {
MAX=31
if [ $1 -eq 2 ]; then
MAX=29
fi
cal $1 $2 | grep $MAX >> /dev/null
printf $((MAX-$?))
}
getDate() {
if [ -f OUTPUTDATE.tmp ]; then
IN=$(cat OUTPUTDATE.tmp)
MONTH=$(echo $IN | cut -d \/ -f 1)
DAY=$(echo $IN | cut -d \/ -f 2)
YEAR=$(echo $IN | cut -d \/ -f 3)
MDAYS=$(getMonthDays $MONTH $YEAR)
(((DAY+=1)>MDAYS)) && ((DAY=1)) && (((MONTH+=1)>12)) && ((MONTH=1)) && ((YEAR+=1))
OUTPUTDATE="$MONTH/$DAY/$YEAR"
echo $OUTPUTDATE > OUTPUTDATE.tmp
fi
}
printTimestamp() {
if [ -f OUTPUTDATE.tmp ]; then
OUTPUTDATE=$(cat OUTPUTDATE.tmp)
printf %s "00:00:01 (lmgrd) TIMESTAMP "$OUTPUTDATE
fi
}
你能發佈代碼'getDate'和'printTimestamp'嗎? – Fazlin 2014-09-30 07:36:15
@ user1984289您好! – 2014-09-30 07:39:01
awk命令是有人試圖使用awk作爲它不適合的shell。他們的語法是荒謬的錯誤,這是一個巨大的線索,他們不知道他們在做什麼。所有這些shell和sed的東西都可以在一個小而簡單的awk腳本中輕鬆完成。如果你用樣本輸入和預期輸出發佈另一個問題並用'awk'標記它,有人會告訴你如何去做。 – 2014-10-01 13:39:31