awk 行輸出,字段輸出,readline 及awk 數組


awk

1 工作原理

逐行讀取文本,默認以空格或tab鍵為分隔符進行分隔,將分隔所得的各個字段保存到內建變量中,並按模式或者條件執行編輯命

sed命令常用於一整行的處理, 而awk比較傾向於將一行分成多個"字段"然后再進行處理。awk信息的讀入也是逐行讀取的,執行結果可以通過print的功能將字段數據打印顯示。

在使用awk命令的過程中,可以使用邏輯操作符“&&"表示“與"、"|| "表示“或"、"!"表示“非";還可以進行簡單的數學運算,如+、-、*、/、%、^分別表示加、減、乘、除、取余和乘方


2 格式

awk 選項 '模式或條件 {操作} ' 文件 1 文件 2 .......

awk -f 腳本文件 文件1 文件2

注意:awk 里


3 awk 常見的內建變量(可以直接使用)

變量 釋義
FS 輸入字段列分隔符。指定每行文本的字段分隔符,默認使用空格或者制表位。與 “-F” 相同
OFS 輸出字段列分隔符
NF 當前處理的行的字段個數
NR 當前處理行的行號(序號)
$0 當前處理的行的整行內容
$n 當前處理行的第n個字段(第n列)
FILENAME 被處理的文件名
RS 行分隔符。awk 從文件讀取資料是,將根據RS的定義把資料切割成許多條記錄,而awk 一次僅讀入一條記錄,以進行處理。預設值是'\n'

4 按行輸出文本

image-20210726175227896

image-20210726175701622

image-20210726175852585

image-20210726180127343

image-20210726204211857


5 BEGIN模式和END 模式

BEGIN 模式,在處理指定的文本之前,需要先執行BEGIN模式中指定的動作。awk再處理指定的文本。之后,再執行END模式中指定的動作。END{}語句塊中,往往會放入打印結果等語句。

BEGIN 和 END 中的命令只會執行一次

awk ' BEGIN{}; { } ; END{}'

image-20210726205015028


6 按字段輸出文本

image-20210726205229026

img

img

image-20210726205559269

image-20210726210149318

image-20210726210800559

image-20210726210930623

image-20210726211147827

image-20210726211435215

img


7 通過管道,雙引號調用 shell 命令

image-20210726212259735

image-20210726212629587

image-20210726215605938

image-20210726220434264

image-20210726221757588


8 getline

當getline左右無重定向符“<”或“|”時, awk 首先讀取到了第一行,然后getlinie就得到了第一行下面的1行,也就是第二行 。 getline 之后,awk 會改變對應的NF,NR 嗎,FNR ,$0 等內部變量,所以此時,$0 的值就不再是第一行的值,而是第二行的。然后將它打印出來

當getline 左右兩邊有重定向"<" 或 "|" 時,getline 則作用於定向輸入文件,由於該文件是剛打開,並沒有被awk 讀入,只是getline 讀入,那么getline 返回的是該文件的第一行,而不是隔行.

image-20210726222904955

image-20210726224222221


9 awk 與數組

awk 數組的下標除了可以使用數字,也可以使用字符串。使用字符串作為數組下標,需要給字符串加上雙引號""

image-20210726224836832

image-20210726225424816

image-20210726230534032

image-20210726230723911


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM