Text-Processing
如何用上一行的數據替換沒有數據的行
輸入
Time Value Flag 06:15:10 49.95 Actual 00:00:00 0.00 NoValue 06:22:50 49.94 Actual 06:23:00 49.93 Actual 06:23:10 49.93 Actual 06:23:20 49.93 Actual 06:23:30 49.93 Actual 06:24:40 49.92 Actual 00:00:00 0.00 NoValue
我必須替換包含“NoValue”的行。時間將替換為上次記錄的時間,增量為 10 秒(10 秒) 值將替換為上次記錄的時間 標誌將替換為實際
我的結果將顯示為,
Time Value Flag 06:15:10 49.95 Actual 06:15:20 49.95 Actual 06:22:50 49.94 Actual 06:23:00 49.93 Actual 06:23:10 49.93 Actual 06:23:20 49.93 Actual 06:23:30 49.93 Actual 06:24:40 49.92 Actual 06:24:50 49.92 Actual
awk -F'[: ]+' -v addSec=10 ' NR>1 && /Actual/{ sec=(($1*3600)+($2*60)+$3) +addSec; prevTime=sprintf("%02d:%02d:%02d", sec/3600, sec%3600/60, sec%60) OFS $4 OFS $5; } /NoValue/{ $0=prevTime }1 ' infile
嘗試這個:
貓小說 | tr -s " " | awk -F"
$$ : $$" -f val.awk 在哪裡:
cat noval 06:15:10 49.95 Actual 00:00:00 0.00 06:22:50 49.94 Actual 06:23:00 49.93 Actual 06:23:10 49.93 Actual 06:23:20 49.93 Actual 06:23:30 49.93 Actual 06:24:40 49.92 Actual 00:00:00 0.00
和
cat val.awk { if($5=="") { print g } else { print $0 $3=$3+10 if ($3>59){ $3=$3-60 $2=$2+1 } if ($2>59){ $2=$2-60 $1=$1+1 } if(length($1)<2) {$1="0"$1} if(length($2)<2) {$2="0"$2} if(length($3)<2) {$3="0"$3} g=$1":"$2":"$3" "$4" "$5 } }
結果是:
06:15:10 49.95 Actual 06:15:20 49.95 Actual 06:22:50 49.94 Actual 06:23:00 49.93 Actual 06:23:10 49.93 Actual 06:23:20 49.93 Actual 06:23:30 49.93 Actual 06:24:40 49.92 Actual 06:24:50 49.92 Actual
注意:使用 awk 我們沿著字元冒號 (:) 和空格分解每一行。這樣我們就可以訪問時間戳的三個組件(第 1、2、3 列),以便可能添加 10。我們使用 tr 將多個空格壓縮為一個。awk 中的 F 標誌設置為沿冒號和/或空間分解行以進行操作。