使用 awk 命令去掉文字檔中的空行
linux shell awk -在處理文字檔時,有時候需要將空白行去掉。這時候,可以利用 awk 來處理。
What
- awk
-
Linux 及 Unix 環境中的一種的純文本處理工具。概念是把文字檔當作表格來處理。
How
有非空白以外的字元才處理
> awk NF <file>
awk 的簡單的語法結構為 awk [Pattern] '[{Actions}]' [Files],
awk 會依據 Pattern 傳回值來決定要不要處理,如果省略就表示每一行都會處理。
而如果 '{Actions}' 省略內定為 '{print $0}',就是印出整行文字。
沒有以 -F fs 指定欄位分隔符號時,內定是一個以上的空白(/[\s\t]+/)來分隔欄位,NF 表示為目前該行的欄位數。
且 awk 會省略頭尾空白。
所以,上述的 awk NF 指令的意思為如果有欄位就把該行印出來。
用 javascript 來寫就約等於
for (var line in text) {
(line.trim().split(/[\s\t]+/).filter(x=>x.length).length) && console.log(line)
}
當然,上述程式碼還要加上讀檔的部分才能達到跟 awk NF 差不多的功能。
有空白字元也算
> awk /./ <file>
Pattern 可以為正規表示式,所以 awk /./ 的意思為如果有任何換行符號之外的字元就把該行印出來。
去除註解
> awk '!/^\s*#/' <file>
同理,可以利用來去掉程式碼中的註解。
Pattern 最好用單引號 ' 括起來,以避免 awk 無法辨識。語法結構表示為`awk 'Pattern {Actions}'`。