Shell
是否可以通過 cli 從 csv 列印迭代的參數範圍?(見範例)
我有數百個日誌分佈在幾千個虛擬機上,我正在嘗試創建一些腳本來快速掃描日誌,我已經弄清楚了展示文稿的大部分內容,並想知道是否有一種使用 awk 之類的簡單方法, printf 等,我知道如何使用,但專門用於從日誌文件中列印迭代的值範圍?
例子:
awk -F, '{printf $(1..5)}' huge_log_file.csv column1 column2 column3 column4 column5 etc.
我知道如何正確地對列印輸出進行 awk、格式化、分離等操作,但我認為如果我可以指定一系列我希望它列印的欄位會很好。
如果我弄清楚如何使用建議的類似問題和/或自己解決問題,我會更新我的問題。
謝謝!
編輯:我知道如何列印 $ 1 $ 2 $3 手動,但在我的範例中沒有包含它
編輯 2:我也知道如何使用 NF 計算帶有 awk 的欄位數,以便稍後使范圍動態化,這是我的長期目標。
以第一個欄位開頭的範圍
讓我們考慮這個測試文件:
$ cat input.csv a,b,c,d,e,f,g,h,i,j
至少使用 GNU awk,我們可以列印前五個(或其他數量)的欄位,如下所示:
$ awk -F, '{NF=5; print}' OFS=, input.csv a,b,c,d,e
對於那些重視簡潔而不是清晰的人,我們可以等效地寫:
$ awk -F, '{NF=5;} 1' OFS=, input.csv a,b,c,d,e
動態調整大小
要省略最後 2 個欄位,無論這兩個欄位之前有多少個欄位:
$ awk -F, '{NF-=2; print}' OFS=, input.csv a,b,c,d,e,f,g,h
其他範圍
要使用任意欄位列印開始和停止,則需要一個循環:
$ awk -v first=3 -v last=6 -F, '{for (i=first;i<=last;i++) printf "%s%s",$i,(i==last?ORS:OFS)}' OFS=, input.csv c,d,e,f
要從第三個欄位列印並動態保留最後兩個欄位:
$ awk -v first=3 -F, '{last=NF-2; for (i=first;i<=last;i++) printf "%s%s",$i,(i==last?ORS:OFS)}' OFS=, input.csv c,d,e,f,g,h