[Linux] 用 awk 每 n 行擷取檔案
Contents:
1. 前言:檔案太大了,想要每 n 行擷取檔案縮小檔案
2. 用 awk 每 n 行擷取檔案
3. 其他 awk 用法
(1) 擷取含指定字串的行數
(2) 擷取每行的第 n 個字串
(3) 印出指定欄位含指定字串的行數
4. 總結
1. 前言
情景:若現在有個檔案很大,想要每 n 行擷取檔案來縮小檔案大小,在 Linux 可以怎麼做呢?
Solution:用awk 'NR % n == 0' file.txt > file_out.txt
指令每 n 行擷取檔案
2. 用 awk 每 n 行擷取檔案
用 10 行的檔案為例,看看 awk 怎麼每 n 行擷取檔案吧!
file.txt
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
line 10
下指令 awk 'NR % 3 == 0' file.txt > file_out.txt
,每 3 行輸出 file.txt 的內容至 file_out.txt,結果如下,成功輸出第 3、6、9 行至另一個檔案啦!
3. 其他 awk 用法
General form:awk [option] 'selection_criteria' input_file > output_file
承接上面的範例 file.txt,來看看其他 awk 處理檔案的用法吧!
(1) 擷取含指定字串的行數
command: awk '/字串/' file.txt
(2) 擷取每行的第 n 個字串
預設用空白切割字串,$0代表整行,$1、$2、$3依序為以空白切割的字串。
command: awk '{print $列數}' file.txt
(3) 印出指定欄位含指定字串的行數
command: awk '{ if($列數 == "字串") print $0 }' file.txt
4. 總結
當對一個檔案想要切割、擷取行數,可以想到 awk
,grep
也是在 Linux 常用來擷取檔案的指令(ref: grep 指令實用技巧),除了上面提到的幾個範例,awk 還有一些內建的好用變數可以使用(ref: awk裡好用的變數:FS, OFS, RS, ORS, NR, NF, FILENAME, FNR),下次若要處理檔案的話,不妨可以想到實用的 awk
。
小知識:awk 的取名是來自於三個作者的名字縮寫-Aho, Weinberger, and Kernighan。
Reference
-2021.06.15。