Text-Processing
管道跳過每 100 行中的 99 行
我有一個 bash 命令管道,可以產生大量的日誌文本輸出。但除了時間戳和一些次要標誌外,它主要重複上一行,主要輸出數據在幾個小時內僅更改一次。我需要將此輸出儲存為文本文件以供將來處理/研究。為了只列印每個 X 中的第一行,我應該將它傳輸到什麼位置?
列印第一行並在每 N 行中跳過接下來的 N-1 行。
awk -v N=100 'NR%N==1' infile
測試:
$ seq 1000 |awk -v N=100 'NR%N==1' 1 101 201 301 401 ....
要傳遞要跳過的行數,我們也可以從參數中讀取,所以:
$ seq 1000 |awk -v Num=100 -v Skip=98 '(NR-1)%Num<Num-Skip' 1 2 101 102 201 202 301 302 401 402 501 502 601 602 701 702 801 802 901 902
@αғsнιη 已經向您展示瞭如何執行您要求的操作(跳過特定數量的行),但聽起來您最好不要列印僅在“時間戳和一些次要標誌”方面不同的後續行,而不是弄清楚一個要跳過的特定行數。如果是這樣,如果這些“時間戳和一些次要標誌”儲存在欄位 3、6、8 和 17 中,您會這樣做:
awk ' { origRec = $0 $3=$6=$8=$17="" currKey = $0 } currKey != prevKey { print origRec prevKey = currKey } ' file
您可以輕鬆地調整上面的內容,不僅列印每個相似組的第一行,還列印最後一行,以便您可以查看第一個和最後一個時間戳(如果有用),和/或您可以添加列印方式許多類似的行被跳過。