Bash

awk:繞過標頭而不編寫程式碼

  • March 10, 2020

這是我在正常基礎上鍵入的一個表達式,因為每個人都使用帶頭的 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

這裡,NRawk“記錄號”的內置變數,通常預設為行號(注意,在處理多個文件時,這是“全域處理的行數”,每個文件的行號是FNR)。您還可以通過省略NR==1{...}部分輕鬆省略列印標題。

如果最終你將print在你的操作中使用,你可以“打高爾夫球”這個

awk -F',' 'NR>1{ your code here }1' foo.csv

代表1“列印結果行($0)”。

還:

  • 您不需要將cat文件通過管道傳輸到awk,只需將其作為命令行參數提供
  • 未初始化的變數預設為“0”,因此您實際上並不需要您的部分start=0中的語句BEGIN

引用自:https://unix.stackexchange.com/questions/566781