使用 awk 生產表的兩種不同方式

2021-09-02 22:03:32 字數 1589 閱讀 2925

awk 可以用於解決重複性高的任務,核心在於使用 awk 來批量的生成需要的表。這裡的表既可以是特定的格式設定,如圖形介面中的 style ,也可以是**或者其它。

這裡我以圖形介面中的 style 為例。

當我需要對多個功能不同,操作方式相同的 checkbutton 指定不同的 style 來完成各自不同的介面顯示效果時,我可以使用 awk 來生成不同的 style ,這樣我就不需要手動編寫每乙個 style 了,提高了我的工作效率。

首先我需要得到一張表,這張表中列舉出每乙個特定的例項不同的變化,我編寫的 awk 指令碼為不變數。這裡我將變化量從 style 中提取並轉移到 awk 的輸入表中,使用 awk 指令碼對不同的輸入例項以同樣的過程進行處理,得到最終的 style 表。這樣做不僅減少了重複性的工作,也讓我能更好的處理未來的變化。如果需要頻繁更換具體的 style, 我只需要修改 awk 的輸入表然後執行指令碼生成新錶即可。

對於 awk 而言,可以有以下兩種不同的實現方式:

直接在函式中輸出

這種方式實現較為簡單,如果你需要延時輸出,你可以考慮第二種方式。

在函式中將輸出複製到動態陣列中,將動態陣列返回

延緩輸出。將輸出暫存到動態陣列中,由使用者決定在什麼時候進行輸出。

程式**如下:

#!/usr/bin/awk -f

function make_style_one(stylename, srcicon, desticon)

printf("\t\n")

}function make_style_two(stylename, srcicon, desticon)

string = sprintf("\t\n")

return string

}begin

string = make_style_two($1, $2, $3)

make_style_one($1, $2, $3)

print "\n", string

}

測試如下:

asd sd er wer

asd sd er wer is invalid

re weqr wer ewr q ewrq

re weqr wer ewr q ewrq is invalid

qq is invalid

q w

q w is invalid

light light_on light_off

推薦使用第二種方式,此種方式靈活性更好。在編寫 awk 函式時,對於 print 類函式輸出

中的特殊字元處理,你可以預先使用 sed 來進行替換,甚至於 printf 中的每一行你都可

以使用 sed 來處理得到。

你可以在 print、printf 後使用重定向操作將輸出結果直接輸出到檔案中,可以直接使用 『>』 string、』>>』 string 來完成。在 awk 中重定位操作只開啟檔案一次,然後成功執行的 print、printf 語句將資料新增到開啟的檔案中。使用 『>』 時,第一次開啟檔案將會清空檔案內容,使用 『>>』 則不會清空檔案內容。

參考書籍 《the awk programming language》。

用兩種不同方式手動實現鍊錶

什麼是鍊錶 let head newnode 1 設定第乙個節點head資料域為1 let head1 newnode 2 設定第二個節點head1資料域為2 head.next head1 設定第乙個節點head指標域 指向第二個節點head1 head2 newnode 3 設定第三個節點hea...

定義字元陣列的兩種不同方式的區別

由於c語言中沒有字串型別,所以用char陣列代字串型別,定義字元陣列的方式有兩種,下面來看它們的區別 方式一 以單字元形式 要宣告初始化乙個可儲存四個有效值的字元陣列,形式如下 char chararray 4 方式二 以字串形式 要宣告乙個可儲存四個有效值的字元陣列,形式如下 char strin...

C 處理檔案結束符的兩種不同方式

首先來看一下下面這小段 include include include int main 裡面while一直檢查輸入流的狀態,知道接收到檔案結束符 在windows上面是ctrl z 在linux unix上面是ctrl d 或錯誤輸入,但是當輸完多個字元再加上乙個檔案結束符再按enter的時候,發...