ncdump應用範例

 

背景

  • netCDF是地球科學領域重要的檔案格式。然而因其二進位檔案格式的限制,不方便以文字檔案方式檢閱,官網提供了ncdump讓使用者可以輕鬆讀取其內容。
  • 由於netCDF檔案使用了階層的資訊技術,除了ncdump,使用python或其他高階的軟體(或程式庫),可以直接讀取其內容,不必再以文字檔模式循序讀取。
  • 以下以ioapi協定之內容說明CDL(Common Data format Language)的內容順序如下表所示。

CDL的內容順序

項次 名稱 內容 說明
1 dimensions 所有變數應用到的維度名稱、長度、是否受限 與檔案結構有關,為表頭的第一組內容
2 variables 按照英文字母的順序將所有變數名稱列表,包括其維度、數據類別(整數、實數、字串、邏輯布林等)、個別屬性如長名稱、內容敘述、單位等等,使用者可以自由增加變數的屬性 表頭的第二組內容,如檔案含有眾多變數(VAR維度的長度很長),ncdump結果會很長
3 global attributes 全域屬性,有關整體檔案的性質,使用者也可以ncatted來增減修改其內容。 其中history的內容是nco程式庫自動產生的,可以從中找到檔案處理的過程,如果是fortran或是python所產生的新檔,則不會記錄在其history。
4 data 數據內容,會按前述排序依次印出變數的內容,顯示的維度順序如未指定,為C語言協定方式 內容會非常長,如未妥善引導將會佔據顯示器記憶體。一般會以ncdump -h選項只列出表頭(–head),以避免出現data部分節省顯示器記憶內容。

ncdump的應用

原則

  • 將表頭顯示於螢幕或檔案進行確認
    • 使用ncdump -h $nc指令
  • 將整個檔案連data數據內容輸出成CDF文字檔案進行後續處理,再以ncgen轉成nc檔案。
    • 範例可以詳見鳥哥為公版模式所寫的run.ocean.sh

應用範例

  • nc檔案的維度:ncdump -h $nc|head
  • ioapi檔案的起始日期時間:ncdump -h $nc|grep SDATE;ncdump -h $nc|grep STIME;
  • 特定條件之實數變數名稱:ncdump -h $nc|grep float|grep DUST
  • 尋找特定全域變數的內容:ncdump -h $nc|grep NAME_CAMx
  • 列印表頭及特定變數的內容:ncdump -v CP_NO $nc|M
  • 從nc檔案的歷史紀錄中找到含有ncks的特定文字(見nc檔案更名):ncdump -h $nc|grep ncks|cut -d/ -f10|cut -d . -f11|cut -c -10
  • 從變數的個數來判斷是什麼模式產生的結果
    • v=$(ncdump -h $nc|grep PM25|wc -l);a=$(ncdump -h $nc|grep AVERAGE|wc -l)
    • 參見shk.cs([[2022-07-19-shk]]1)

pncdump

  • [pseudonetcdf][pseudonetcdf]套件中也有類似ncdump的程式pncdump,提供更多輸入/輸出格式的選項。有關pncdump支援的格式,可以參考[pncgen][pncgen]。
  • 此處著眼ncdump及pncdump程式的差異說明。
項次 功能 ncdump pncdump 說明
1 只看表頭 -h, -c -H, –head -h在後者是help
2 部分變數 -v -v (same)
3 dump與gen功能 互斥 互用 pncdump也可用於修改檔案
4 指定IO格式 只有nc to text 可以接受-f –out-format 後者非常多樣化

Reference

  • unidata.ucar(2011), ncdump
  • 國家實驗研究院台灣颱風洪水研究中心(2016), NCAR command language workshop, NetCDF格式介紹
  1. https://sinotec2.github.io/FAQ/2022/07/19/shk.html “ CAMx模擬結果之壓縮”