Awk

AWK 幫助將數據過濾成 CSV

  • September 26, 2018

我們正在做一些安全研究,我需要從 Debian repos 中提取所有可用的包名稱、版本、desc 等。

我正在嘗試將輸出解析apt-cache dumpavail為 CSV,並將數據組織成表格形式,如名稱、版本、desc。

我不太擅長 AWK,但我想它是完美的工具嗎?隨意向我推薦我可以為 AWK 製作一個好的正則表達式的方法。

我認為sed可能更適合,例如使用 GNU sed:

解析.sed

/^Package: /                { s///; h }
/^Version: |^Description: / { s///; H }
/^$/                        { x; s/\n/;/gp }

解釋:

  • 找到以所需前綴開頭的行,例如/^Package/
  • 刪除前綴s///,即用任何內容替換先前匹配的模式
  • 將其餘部分保存到保持空間 ( h) 或 ( H),注意h覆蓋保持空間
  • 當遇到包間空行 ( /^$/) 時,交換保持空間和模式空間 ( x) 並用所需的分隔符替換換行符,這裡是分號 ( s/\n/;/gp) 並列印結果

像這樣執行它:

apt-cache dumpavail | sed -nEf parse.sed

附加head輸出為:

0ad;0.0.23-1+b1;Real-time strategy game of ancient warfare                
0ad-data;0.0.23-1;Real-time strategy game of ancient warfare (data files)
0ad-data-common;0.0.23-1;Real-time strategy game of ancient warfare (common data files)
0xffff;0.8-1;Open Free Fiasco Firmware Flasher
2048-qt;0.1.6-1+b1;mathematics based puzzle game
2ping;4.2-1;Ping utility to determine directional packet loss
2vcard;0.6-1;perl script to convert an addressbook to VCARD file format
fonts-3270;2.0.0-1;monospaced font based on IBM 3270 terminals
389-admin;1.1.46-2;389 Directory Administration Server
libds-admin-serv0;1.1.46-2;Libraries for the 389 Directory Administration Server

引用自:https://serverfault.com/questions/932753