Bash
awk:繞過標頭而不編寫程式碼
這是我在正常基礎上鍵入的一個表達式,因為每個人都使用帶頭的 CSV 文件,而且我也必須傳遞標題以達到我的目的:
cat foo.csv | awk -F',' 'BEGIN{start=0}{if(start==0){start = 1; print $0; next;} ...}'
必須有一些簡單的設置來允許標頭通過,並避免創建 BASH 腳本包裝器(並在我的大腦中拖曳它)或一遍又一遍地編寫它。
有這樣的設置嗎?
我假設您仍然希望
awk
對此 CSV 文件執行文本處理操作。如果是這樣,我建議在“行號”上添加一個條件,如下所示:awk -F',' 'NR==1{print} NR>1{ your code here }' foo.csv
這裡,
NR
是awk
“記錄號”的內置變數,通常預設為行號(注意,在處理多個文件時,這是“全域處理的行數”,每個文件的行號是FNR
)。您還可以通過省略NR==1{...}
部分輕鬆省略列印標題。如果最終你將
awk -F',' 'NR>1{ your code here }1' foo.csv
代表
1
“列印結果行($0
)”。還:
- 您不需要將
cat
文件通過管道傳輸到awk
,只需將其作為命令行參數提供- 未初始化的變數預設為“0”,因此您實際上並不需要您的部分
start=0
中的語句BEGIN