[英]How to use output of a command inside an awk command?
我想打印出一個日志文件的最新更新,而不是上面的任何內容(舊日志)。 每5分鍾更新/添加日志一次,沒有選項可以覆蓋而不是追加。 每次更新行的數量現在不改變,但我不希望有改劇本是否以及何時添加了新的領域。 每個附件以“日期:..”開頭。
到目前為止,這是我的解決方案。 我正在查找最后一次出現的“日期”的行號,然后嘗試將其發送到“ awk'NR> line_num_here文件名”-
line=$(grep -n Date stats.log | tail -1 | cut --delimiter=':' --fields=1) | awk "NR>$line" file.log
但是,我無法更新$ line! 從我第一次運行腳本起,它始終擁有第一個值。 有沒有辦法正確更新$ line? 還是有其他方法可以做到這一點? 也許是一種直接將其傳遞給awk而不是進行變量創建的方法?
解決方案中的問題是,您需要用a替換awk
前面的管道;
。 這些是兩個單獨的命令,通常會出現在兩個單獨的行中:
line=$(...)
awk -v "NR>$line" file
但是,您可以將它們分開;
如果應該出現在同一行:
line=$(...); awk -v "NR>$line" file
但是無論如何,您都可以大大簡化命令。 只需兩次使用兩次awk
,如下所示:
awk -v ln="$(awk '/Date/{l=NR}END{print l}' a.log)" 'NR>ln' a.log
我正在使用
awk '/Date/{l=NR}END{print l}' a.log
獲取最后一次出現的Date的行號。 該值通過-v ln=...
傳遞給外部awk命令。
這是一種方法,可以通過awk的調用而只讀取一次文件:
awk '/Date/ { n = 1 } { a[n++] = $0 } END { for (i = 1; i < n; ++i) print a[i] }' file
這會將每一行寫入數組a
,每當/Date/
模式匹配時,將計數器n
重置為1
。 一旦讀取了文件,它就會遍歷數組,打印所有最近保存的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.