awk是處理文本文件的一個應用程序,幾乎所有 Linux 系統都自帶這個程序。它依次處理文件的每一行,並讀取裏面的每一個字段。
[engine@client2v ~/yy1]$ cat demo.txt
this+is+a+demo+for+awk
have+a+good+time+exercising+awk
enjoy+yourself
awk處理文本
(1)awk action filename;(2)stdin | awk action
[engine@client2v ~/yy1]$ awk '{print $0}' demo.txt
this+is+a+demo+for+awk
have+a+good+time+exercising+awk
enjoy+yourself
[engine@client2v ~/yy1]$ cat demo.txt | awk '{print $0}'
this+is+a+demo+for+awk
have+a+good+time+exercising+awk
enjoy+yourself
[engine@client2v ~/yy1]$ echo 'create some text from screen' | awk '{print $0}'
create some text from screen
對文本的每行操作
$0表示當前行全部內容
$1表示根據空格/製表符切分,第一個字段
$i表示根據空格/製表符切分,第i個字段
$(NF-1)表示根據空格/製表符切分,最後倒數第二個字段
$NF表示根據空格/製表符切分,最後一個字段
[engine@client2v ~/yy1]$ echo 'create some text from screen' | awk '{print $1,$NF}'
create screen
#逗號表示按空格連接變量$1和$NF
指定每行切分的分割符
awk -F ‘分隔符’ action filename
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '{print $(NF-1)}'
for
exercising
enjoy
awk的內置變量及內置函數
FILENAME:當前文件名
FS:字段分隔符,默認是空格和製表符。
RS:行分隔符,用於分割每一行,默認是換行符。
OFS:輸出字段的分隔符,用於打印時分隔字段,默認爲空格。
ORS:輸出記錄的分隔符,用於打印時分隔記錄,默認爲換行符。
OFMT:數字輸出的格式,默認爲%.6g。
++++++++++++++++++++++++++
tolower():字符轉爲小寫。
length():返回字符串長度。
substr():返回子字符串。
sin():正弦。
cos():餘弦。
sqrt():平方根。
rand():隨機數。
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '{print NR,$(NF-1)}'
1 for
2 exercising
3 enjoy
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '{print NR,length($(NF-1))}'
1 3
2 10
3 5
awk條件判斷,篩選行
awk condition action filename
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '/awk/ {print $0}'
this+is+a+demo+for+awk
have+a+good+time+exercising+awk
#/awk/是正則表達式,表示篩選出包含awk的行
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' 'NR>1 {print $0}'
have+a+good+time+exercising+awk
enjoy+yourself
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '$1=="have" {print $0}'
have+a+good+time+exercising+awk
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '{if ($1 == "have") print $0; else print "++++++++"}'
++++++++
have+a+good+time+exercising+awk
++++++++