awk文本篩選

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
++++++++
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章