国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux命令awk詳細(xì)用法

這篇具有很好參考價(jià)值的文章主要介紹了Linux命令awk詳細(xì)用法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

簡(jiǎn)介

? awk?是一種強(qiáng)大的文本處理工具,用于在命令行環(huán)境下對(duì)文件或數(shù)據(jù)流進(jìn)行逐行處理和分析。它是由 Alfred Aho、Peter Weinberger 和 Brian Kernighan 在 1977 年開發(fā)的,并以他們?nèi)说男帐厦?code>awk?在 Unix/Linux 系統(tǒng)中非常常見,也有 Windows 版本可用。

? awk?基于一種腳本語言,語法類似于 C 語言,因此熟悉 C 或類似語言的開發(fā)者能夠輕松上手。它的主要功能是對(duì)于輸入數(shù)據(jù)的逐行處理和分析,可以通過靈活的模式匹配、操作符和函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理和轉(zhuǎn)換。awk?的工作方式是逐行讀取輸入數(shù)據(jù),然后根據(jù)用戶指定的模式和動(dòng)作對(duì)數(shù)據(jù)進(jìn)行處理。

目錄

1. 語法

1.1. 參數(shù)選項(xiàng)

1.2. 內(nèi)置變量

1.3. 轉(zhuǎn)義符

1.4. 正則表達(dá)式

1.5. 操作符

1.6. 控制語句

1.7. 內(nèi)置函數(shù)

2. 數(shù)據(jù)過濾

2.1. 基礎(chǔ)用法

2.2. 過濾行方法

2.3. 過濾列方法

2.4. 組合過濾行、列

2.5. 輸出行號(hào)

2.6. 輸出列號(hào)

2.7. 忽略大小寫

2.8. 指定分隔符

3. 正則表達(dá)式

3.1. 模糊匹配

3.2. 精確匹配

3.3. 邏輯匹配

3.4. 范圍匹配

4. 控制語句

4.1. 條件判斷語句

4.2. 循環(huán)控制語句

5. 內(nèi)置函數(shù)方法

5.1. 字符串轉(zhuǎn)換

5.2. 構(gòu)造隨機(jī)數(shù)

5.3. 生成大數(shù)據(jù)文件

5.4. 數(shù)學(xué)運(yùn)算

5.5. BEGIN用法

5.6. END用法


1. 語法

1.1. 參數(shù)選項(xiàng)

-F:指定分隔符
-v:定義變量
-f:指定文件讀取awk代碼
-o:優(yōu)化Awk程序以提高性能
-W:兼容舊版本
-r:?jiǎn)⒂脭U(kuò)展正則表達(dá)式中的重復(fù)操作符

? ? ? ? ??文章來源地址http://www.zghlxwxcb.cn/news/detail-687436.html

1.2. 內(nèi)置變量

FS :指定字段之間的分隔符。默認(rèn)為連續(xù)的空白字符(空格和制表符)。
OFS:輸出字段分隔符。默認(rèn)為連續(xù)的空白字符(空格和制表符)。
RS :記錄分隔符,默認(rèn)為換行符。
ORS:輸出記錄分隔符,默認(rèn)為換行符。
NF :字段數(shù)量,表示當(dāng)前記錄中字段的數(shù)量。
NR :記錄數(shù)量,表示已讀取的記錄的總數(shù)。
$0 :所有的列。
$n :指定n列。$1表示第1列,$2表示第2列...
FILENAME:當(dāng)前正在處理的文件的名稱。
ARGV:包含命令行中的所有參數(shù)。

? ? ? ? ??

1.3. 轉(zhuǎn)義符

\n:換行符
\t:制表符(Tab)
\b:退格符
\r:回車符
\f:換頁符
\\:反斜杠本身
\":雙引號(hào)
\':?jiǎn)我?hào)

? ? ? ? ??

1.4. 正則表達(dá)式

.:匹配除了換行符之外的任意字符。
*:匹配前面字符的零個(gè)或多個(gè)重復(fù)。
+:匹配前面字符的一個(gè)或多個(gè)重復(fù)。
?:匹配前面字符的零個(gè)或一個(gè)重復(fù)。
^:匹配行的開頭。
$:匹配行的結(jié)尾。
[ ]:字符類,匹配方括號(hào)內(nèi)的任意一個(gè)字符。
[^ ]:否定字符類,匹配除了方括號(hào)內(nèi)字符之外的任意一個(gè)字符。
( ):分組,將括號(hào)內(nèi)的表達(dá)式作為一個(gè)整體。
|:或操作符,匹配兩個(gè)或多個(gè)表達(dá)式中的任意一個(gè)。

? ? ? ? ??

1.5. 操作符

算術(shù)操作符

+:加法
-:減法
*:乘法
/:除法
%:取余數(shù)
^:冪運(yùn)算

關(guān)系操作符

> :大于
< :小于
==:等于
!=:不等于
>=:大于等于
<=:小于等于

邏輯操作符

&&:邏輯與(and)
||:邏輯或(or)
! :邏輯非(not)

賦值操作符

= :直接賦值
+=:加法賦值
-=:減法賦值
*=:乘法賦值
/=:除法賦值
%=:取模賦值

字符串操作符

"":雙引號(hào)用于拼接字符串
~ :匹配字符串
!~:不匹配字符串

增減操作符

++:自增
--:自減

? ? ? ? ??

1.6. 控制語句

條件控制

if (條件) {代碼塊} else {代碼塊}

循環(huán)控制

# 迭代循環(huán)
for (i=1; i<=10; i+=1) {代碼塊}
# 只有條件為真,才能循環(huán)
while (條件為真) {代碼塊}
# 至少打印1次代碼
do {代碼塊} while (條件為真)

控制流語句

continue:跳出當(dāng)前循環(huán)
break:跳出整個(gè)循環(huán)
exit:終止整個(gè)Awk程序

? ? ? ? ??

1.7. 內(nèi)置函數(shù)

字符串函數(shù)

length(str)
    '返回字符串 str 的長度。'
index(str, search)
    '返回字符串 str 中第一次出現(xiàn) search 的位置。'
substr(str, start, length)
    '返回字符串 str 中從 start 開始長度為 length 的子字符串。'
split(str, arr, sep)
    '將字符串 str 按照分隔符 sep 分割,并將結(jié)果存儲(chǔ)到數(shù)組 arr 中。'
tolower(str)
    '將字符串 str 轉(zhuǎn)換為小寫。'
toupper(str)
    '將字符串 str 轉(zhuǎn)換為大寫。'

數(shù)值函數(shù)

int(n) :返回 n 的整數(shù)部分。
sqrt(n):返回 n 的平方根。
sin(n) :返回 n 的正弦值。
cos(n) :返回 n 的余弦值。
rand() :返回一個(gè) 0 到 1 之間的隨機(jī)數(shù)。

文件和輸入函數(shù)

getline:讀取下一行輸入并賦值給特定變量。
NF:當(dāng)前行的字段數(shù)。
NR:當(dāng)前行的行號(hào)。
FNR:當(dāng)前文件的行號(hào)。

? ? ? ? ??

2. 數(shù)據(jù)過濾

2.1. 基礎(chǔ)用法

用法:[ ] 表示可選,<> 表示必選

awk [參數(shù)] <條件> [文件]

1、查看文件內(nèi)容

# 查看文件全部?jī)?nèi)容
awk // tmp.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

# 匹配包含c的行
awk /c/ tmp.txt

?Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

# 指定分隔符為逗號(hào),匹配包含c的行,只輸出第1列和第3列
awk -F , '/c/{print $1, $3}' tmp.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、直接輸出內(nèi)容(使用BEGIN)

# 使用print直接打印內(nèi)容
awk 'BEGIN{print 1, "abc"}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

# 使用變量賦值
awk -v num=100 'BEGIN{print "number is", num}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、管道符過濾

# 條件判斷第1列的值
seq 10 |awk '$1 > 5 && $1 < 9'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2.2. 過濾行方法

1、輸出第1行

awk 'NR==1{print}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、輸出最后1行

# 倒數(shù)第2行(先獲取最后一行數(shù)據(jù),再獲取它的上一行),處理大數(shù)據(jù)文件較快
awk '{ line[NR] = $0 } END { print line[NR-1] }' file.txt

# 最后1行使用END
awk 'END{print}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、輸出第3~6行

# 通過判斷的方式獲取3~6行
awk 'NR>=3 && NR<=6' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、輸出第2、6、8行數(shù)據(jù)

awk 'NR==2 || NR==6 || NR==8' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5、每隔3行輸出一次

awk 'NR % 3 == 0' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

6、過濾n行后面/前面的全部行

# 輸出5行以后的全部行
awk 'NR > 5' file.txt

# 輸出3行以前的全部行
awk 'NR < 3' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

7、不輸出空行

awk 'NF' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

8、輸出包含關(guān)鍵字的行

# 輸出包含c的行
awk /c/ file.txt

# 輸出包含c和f的行
awk '/c/ && /f/' file.txt

# 輸出包含a或c的行
awk '/a/ || /c/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

9、輸出匹配到的行的下1行

# 輸出包含5的下一行
awk '/5/ {getline; print}'

# 輸出包含5的行和它的下一行
awk '/5/ {print; getline; print}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

10、匹配開始行和結(jié)束行

# 指定開始行:以2開頭,結(jié)束行:以4開頭。輸出這中間的行
awk '/^2/, /^4/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2.3. 過濾列方法

文件內(nèi)容

1,17083,d7fce2,zhangsan,boy,18
2,13246,6de9bb,lisi,boy,39
3,8405,4c6e62,xiaomei,girl,28
4,11783,095676,wangwu,boy,20
5,23251,e14d02,zhangjie,girl,21

1、輸出第1、3、5列

awk -F , '{print $1, $3, $5}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、過濾比較多的列(例如3~20列)不建議使用awk,使用cut

# 指定分隔符為逗號(hào),過濾第3~20列
cut -d , -f 3-20 file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、輸出第列1為2,第2列小于50000的行

awk -F , '$1==2 && $2<50000{print}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、模糊匹配第2列以1開頭的行

# 使用 ~ 模糊匹配,^1正則匹配以1開頭
awk -F , '$2 ~ /^1/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5、輸出倒數(shù)第2列、最后1列

# $NF表示最后1列,倒數(shù)第2列-1,倒數(shù)第2列-2...
awk -F , '{print $(NF-1), $NF}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

6、不輸出第3列和最后1列

# 將第3列和最后1列替換為空
awk -F , '{$3=""; $NF=""; print}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

7、每列順序隨意控制

awk '{print $3, $1, $2}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

8、在最后添加一列字符串($0可以換成其他列)

awk '{print $0, "ooo"}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2.4. 組合過濾行、列

1、輸出2~3行的第1列

awk -F , 'NR>1 && NR<4{print $1}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、輸出第4行的第1列和最后1列

awk -F , 'NR==4{print $1, $NF}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、輸出前3行,不包含最后1列

awk -F , 'NR<4{$NF=""; print}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、輸出第1列等于5的第3列的值

awk -F , '$1==5{print $3}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2.5. 輸出行號(hào)

1、輸出每行的行號(hào)

# NR輸出行號(hào),$0輸出全部?jī)?nèi)容
awk '{print NR, $0}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、輸出過濾關(guān)鍵字行的行號(hào)

# 過濾包含e的行,輸出行號(hào)和內(nèi)容
awk '/e/{print NR, $0}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、輸出包含關(guān)鍵字的總行數(shù)

# 過濾包含e的行,每匹配到一次n+1,最后打印n
awk '/e/ {n++} END{print n}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、輸出總行數(shù)

# 輸出文件總行數(shù)
awk 'END{print NR}' file.txt

# 輸出文件總行數(shù),不包含空行
awk 'NF!=0 {n++} END{print n}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2.6. 輸出列號(hào)

1、遍歷所有列

awk -F , '{ for (i=1; i<=NF; i++) print "第" NR "行," "第" i "列: " $i }' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、獲取每行的列數(shù)

# 只輸出列數(shù)
awk -F , '{print NF}' file.txt

# 輸出內(nèi)容
awk -F , '{print "第" NR "行, 共" NF "列: ", $0}' file.txt

# 不輸出內(nèi)容
awk -F , '{print "第" NR "行, 共" NF "列"}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awkLinux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2.7. 忽略大小寫

  • ?忽略大小寫(IGNORECASE=1)
awk 'BEGIN{IGNORECASE=1} /C/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2.8. 指定分隔符

  • awk 默認(rèn)分割符為單個(gè)或多個(gè)空格、以及制表符。

1、使用默認(rèn)匹配分隔符

awk '{print $1}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、指定匹配分隔符

# 方法一:參數(shù) -F
awk -F ',' '{print $1}' file.txt

# 方法二:BEGIN
awk 'BEGIN{FS=","} {print $1}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、OFS 指定輸出分隔符(默認(rèn)是空格)

awk -F ',' '{OFS="|"; print $1, $2}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3. 正則表達(dá)式

3.1. 模糊匹配

1、匹配以 ab 開頭的行

awk /^ab/ file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、匹配以 bc?結(jié)尾的行

awk /bc$/ file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3.2. 精確匹配

1、只匹配a與c之間擁有一個(gè)字符的行

awk /a.c/ file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、匹配a與c之間任意字符的行,不包含ac

awk /a.+c/ file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、匹配a與c之間任意字符的行,包含ac

awk /a*c/ file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、邏輯匹配單個(gè)字符,只匹配包含 abc 或 adc 的行

# b和d任取一個(gè)都可以
awk '/a(b|d)c/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5、邏輯匹配多個(gè)字符,可匹配:abc、adc、abbc、addc、abbbc...

awk '/a(b|d)+c/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3.3. 邏輯匹配

or:匹配包含 bd 或 ac 的行

awk '/bd|ac/' file.txt

?Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

and:匹配包含ab且包含c的行

awk '/ab/ && /c/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

not:匹配不包含ab的行

awk '!/ab/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3.4. 范圍匹配

1、匹配方括號(hào)中的任一字符

# 匹配任意包含d或e的行
awk /[de]/ file.txt

# 匹配除了包含d或e的全部行
awk '!/[de]/' file.txt

# 匹配除了abd以外的其他行
awk '/[^abd]/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、匹配數(shù)字

# 匹配包含數(shù)字的行
awk /[0-9]/ file.txt

# 匹配不包含數(shù)字的行
awk '!/[0-9]/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、匹配小寫字母

# 匹配包含小寫字母的行
awk /[a-z]/ file.txt

# 匹配不包含小寫字母的行
awk '!/[a-z]/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、匹配大寫字母

# 匹配包含大寫字母的行
awk /[A-Z]/ file.txt

# 匹配不包含大字母的行
awk '!/[A-Z]/' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5、組合用法

# 匹配所有包含字母的行(不區(qū)分大小寫)
awk /[A-Za-z]/ file.txt

# 匹配所有包含字母、數(shù)字的行
awk /[A-Za-z0-9]/ file.txt

?Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

6、匹配多個(gè)相同字符

# 匹配ab,且ab連續(xù)的a為2個(gè)以上
awk /a{2}b/ file.txt

# 匹配ab,且ab連續(xù)的b為2個(gè)以上
awk /ab{2}/ file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

7、范圍匹配數(shù)字、字母

# 匹配連續(xù)出現(xiàn)小寫字母2次以上的行
awk /[a-z]{2}/ file.txt

# 匹配連續(xù)出現(xiàn)數(shù)字2次以上的行
awk /[0-9]{2}/ file.txt

?Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4. 控制語句

4.1. 條件判斷語句

  • awk '{if (條件判斷) <為真> ;else <為假>}'

1、判斷數(shù)字大小

awk '{if ($1 < 18) print $1 "歲,未成年" ;else print $1 "歲,已成年"}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、判斷第1列的值小于4,或者最后1列等于5

awk '{if ($1 < 4 || $NF == 5) print $0}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、多分支判斷,沒有elif,通過else if構(gòu)造(判斷第1列的值為4、6、9)

# vim test.awk
{
if($1==4)
    {print "yes"}
else if($1==6)
    {print "yes"}
else if($1==9)
    {print "yes"}
else
    {print "no(" $1 ")"}
}

?Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、三元表達(dá)式

語法

awk '{
    result = (條件1) ? 結(jié)果1 :
             (條件2) ? 結(jié)果2 :
             (條件3) ? 結(jié)果3 :
             條件以外的結(jié)果
    print result
}' file.txt

案例

# vim test.awk
{
label = ($2 < 60) ? "不及格":
        ($2 < 71) ? "及格":
        ($2 < 85) ? "良好":
        ($2 < 101) ? "優(yōu)秀":
        "分?jǐn)?shù)超出范圍"
print $1, label
}

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4.2. 循環(huán)控制語句

1、for 循環(huán)

  • awk 'BEGIN{for (條件) {循環(huán)體代碼}}'
# 循環(huán)5次
awk 'BEGIN{for (i=1; i<=5; i+=1) {print "循環(huán)" i}}'
awk 'BEGIN{for (i=1; i<=5; i+=1) {print "循環(huán)" i} print "不在循環(huán)體中"}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

跳出循環(huán)

  • awk 'BEGIN{for (條件) {if (條件) {跳出當(dāng)前循環(huán)}; if (條件) {跳出整個(gè)循環(huán)}; 循環(huán)體代碼塊}}'
# 如果i=2,跳出當(dāng)前循環(huán);如果i=6,跳出整個(gè)循環(huán)
awk 'BEGIN{for (i=1; i<=10; i+=1) {if (i==2) {continue}; if (i==6) {break}; print "循環(huán)" i}}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、while 循環(huán)

  • awk 'BEGIN{while (條件) {循環(huán)體代碼}}'
# 循環(huán)5次
awk 'BEGIN{i=1; while (i<=5) {print "循環(huán)" i; i+=1}}'
awk 'BEGIN{i=1; while (i<=5) {print "循環(huán)" i; i+=1} print "不在循環(huán)體中"}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

跳出循環(huán)

  • awk 'BEGIN{while (循環(huán)條件) {if (判斷條件) {跳出當(dāng)前循環(huán)}; if (判斷條件) {跳出整個(gè)循環(huán)};?循環(huán)體代碼}}'
# 如果i=2,跳出當(dāng)前循環(huán);如果i=6,跳出整個(gè)循環(huán)
awk 'BEGIN{i=0; while (i<=10) {i+=1; if (i==2) {continue}; if (i==6) {break}; print "循環(huán)" i}}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5. 內(nèi)置函數(shù)方法

5.1. 字符串轉(zhuǎn)換

1、全部轉(zhuǎn)換為大寫(toupper)

awk '{print toupper($0)}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、全部轉(zhuǎn)換為小寫(tolower)

awk '{print tolower($0)}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、單詞首字母大寫

awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))tolower(substr($i,2))}print}' file.txt

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、浮點(diǎn)數(shù)取整(int)

awk '{print int($1)}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5.2. 構(gòu)造隨機(jī)數(shù)

1、生成0~1的隨機(jī)數(shù)

awk 'BEGIN{srand(); print rand()}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、生成0~100的隨機(jī)數(shù)

awk 'BEGIN{srand(); print int(rand()*101)}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、生成100~200的隨機(jī)數(shù)

awk 'BEGIN{srand(); print int(rand()*101) + 100}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、生成100次500~800的隨機(jī)數(shù)

awk -v num=100 'BEGIN{srand(); for (i=1; i<=num; i+=1) {print int(rand()*301) + 500}}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5、生成6位數(shù)隨機(jī)數(shù)

awk 'BEGIN{srand(); printf "%06d\n", int(rand()*1000000)}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

6、生成6位隨機(jī)字符串

awk 'BEGIN{srand(); print rand()}' |md5sum |cut -c 1-6

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5.3. 生成大數(shù)據(jù)文件

1、生成1000w行簡(jiǎn)單數(shù)據(jù)

# 直接使用for循環(huán)1000w次,打印需要輸出的內(nèi)容
awk 'BEGIN { for (i=1; i<=10000000; i++) print "abc" }'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、生成1GB簡(jiǎn)單數(shù)據(jù)

# 使用while無限循環(huán),再利用head讓其最大輸出1GB大小
awk 'BEGIN{w=0; while (w<1) {print "abc"}}' |head -c 1G

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、生成復(fù)雜數(shù)據(jù)

BEGIN{ OFS=","; srand(); for (i=1; i<=100; i+=1)
     {
       col1 = i
       col2 = "abc"
       col3 = sprintf("%c", int(rand() * 26) + 97)
       col4 = int(rand() * 100)
       col5 = "2000-01-01"

       print col1, col2, col3, col4, col5
     }
}
  • 第1列:從1開始疊加
  • 第2列:固定字符"abc"
  • 第3列:一個(gè)隨機(jī)字母
  • 第4列:0~100的隨機(jī)數(shù)
  • 第5列:固定字符"2000-01-01"?

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5.4. 數(shù)學(xué)運(yùn)算

1、求和

awk '{sum += $1} END{print sum}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、求平均數(shù)

awk '{sum += $1} END{print sum/NR}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、求最大值

# NR==1 表示初始化變量max為第一個(gè)數(shù)值
awk 'NR==1 {max=$1} $1>max {max=$1} END{print max}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、求最小值

# NR==1 表示初始化變量min為第一個(gè)數(shù)值
awk 'NR==1 {min=$1} $1<min {min=$1} END {print min}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5、數(shù)學(xué)運(yùn)算

# 第1列的值 + 2(加法)
awk '{print $1 + 2}'

# 第1列的值 - 2(減法)
awk '{print $1 - 2}'

# 第1列的值 * 2(乘法)
awk '{print $1 * 2}'

# 第1列的值 / 2(除法)
awk '{print $1 / 2}'

# 第1列的值 ^ 2(冪運(yùn)算)
awk '{print $1 ^ 2}'

# 第1列的值 % 2(取余)
awk '{print $1 % 2}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5.5. BEGIN用法

  • BEGIN 是在處理輸入之前執(zhí)行一次。

1、初始化變量

awk 'BEGIN{OFS=","; a=1; b=2; print a, b}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、設(shè)置分隔符

awk 'BEGIN{FS=","} {print $2}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

3、輸出表頭信息

awk 'BEGIN{print "數(shù)字如下:"} {print $0}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

4、調(diào)用外部命令

awk 'BEGIN{system("echo $RANDOM |md5sum")}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

5.6. END用法

  • END 是在處理完所有輸入行之后執(zhí)行一次。

1、輸出結(jié)束后的字符串

awk '{print $0} END{print "結(jié)束后執(zhí)行"}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

2、輸出計(jì)算完成后的結(jié)果

# {sum += $1}是在持續(xù)進(jìn)行,END后面的代碼則是所有事情做完后最后執(zhí)行
awk '{sum += $1} END{print sum}'

Linux命令awk詳細(xì)用法,Linux命令,linux,運(yùn)維,awk

? ? ? ? ??

到了這里,關(guān)于Linux命令awk詳細(xì)用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • linux命令三劍客grep、sed、awk

    準(zhǔn)備 grep、sed、awk號(hào)稱\\\"linux三劍客\\\",使用頻繁,功能強(qiáng)大,本文通過一個(gè)實(shí)例演示下基本用法。首先準(zhǔn)備一個(gè)文本文件,命名為text.txt,寫入文件內(nèi)容: grep 首先,最簡(jiǎn)單的是grep。經(jīng)常用來過濾查看日志。對(duì)于grep需要知道如下幾個(gè)常用的命令選項(xiàng): -n: 額外輸出行號(hào)。例如過

    2024年02月05日
    瀏覽(99)
  • pcie 的bdf 詳細(xì)介紹,及用法實(shí)例、linux 查看pci設(shè)備信息命令詳解

    PCIe是指PCI Express,是一種計(jì)算機(jī)總線標(biāo)準(zhǔn)。在PCIe中,每個(gè)連接到主板上的設(shè)備都有唯一的地址,被稱為BDF。 BDF:Bus、Device、Function 的縮寫。其中Bus是指PCIe總線編號(hào)(一個(gè)系統(tǒng)中可能存在多個(gè)PCIe總線),Device是指連接到該總線上的某個(gè)設(shè)備編號(hào),F(xiàn)unction是指同一個(gè)設(shè)備上不同

    2024年02月16日
    瀏覽(21)
  • 【嵌入式開發(fā) Linux 常用命令系列 7 -- awk 常用方法】

    上篇文章:嵌入式開發(fā) Linux 常用命令系列 6 – 字符提取 cut 命令使用 下篇文章:嵌入式開發(fā) Linux 常用命令系列 8 – 二進(jìn)制轉(zhuǎn)為16進(jìn)制常用命令 AWK是一種強(qiáng)大的文本分析工具,最初是由 Aho, Weinberger 和 Kernighan 設(shè)計(jì)和實(shí)現(xiàn)的,AWK 的名稱就來源于他們?nèi)说男帐鲜鬃帜浮T贚in

    2024年02月15日
    瀏覽(52)
  • Linux centos中find命令的多種用途:按照具體應(yīng)用來詳細(xì)說明find的用法舉例

    Linux centos中find命令的多種用途:按照具體應(yīng)用來詳細(xì)說明find的用法舉例

    目錄 一、find命令 二、find命令的語法 (一)語法格式 (二)選項(xiàng) 1、選項(xiàng)(option)介紹 2、控制符號(hào)鏈接的option 3、調(diào)試選項(xiàng)debugopts 4、優(yōu)化選項(xiàng) (三)表達(dá)式expression 1、選項(xiàng)options 2、測(cè)試 tests 3、動(dòng)作actions 三、實(shí)際應(yīng)用的例子 1、按名稱查找文件: 2、按文件類型查找: 3、按

    2024年01月19日
    瀏覽(22)
  • Linux:管道命令與文本處理三劍客(grep、sed、awk)

    Linux:管道命令與文本處理三劍客(grep、sed、awk)

    眾所周知,bash命令執(zhí)行的時(shí)候會(huì)輸出信息,但有時(shí)這些信息必須要經(jīng)過幾次處理之后才能得到我們想要的格式,此時(shí)應(yīng)該如何處置?這就牽涉到 管道命令(pipe) 了。管道命令使用的是 | 這個(gè)界定符號(hào)。另外,管道命令與連續(xù)執(zhí)行命令是不一樣的,這點(diǎn)下面我們會(huì)說明。 我們先

    2023年04月18日
    瀏覽(36)
  • Linux shell編程學(xué)習(xí)筆記46:awk命令的由來、功能、格式、選項(xiàng)說明、版權(quán)、版本

    Linux shell編程學(xué)習(xí)筆記46:awk命令的由來、功能、格式、選項(xiàng)說明、版權(quán)、版本

    在編寫Linux Shell腳本的過程中,我們經(jīng)常要對(duì)Linux命令執(zhí)行的結(jié)果進(jìn)行分析和提取,Linux也在文本分析和提取這方面提供了不少的命令。比如我們之前研究過的cut命令。 Linux shell編程學(xué)習(xí)筆記43:cut命令 https://blog.csdn.net/Purpleendurer/article/details/135730679?spm=1001.2014.3001.5501 除了cut命

    2024年04月24日
    瀏覽(17)
  • 【Linux】ps -ef|grep -v grep|awk ‘{print $2}‘ 命令詳解

    第一步:grep -v grep grep (global search regular expression(RE) and print out the line,全面搜索正則表達(dá)式并把行打印出來)是一種強(qiáng)大的文本搜索工具,它能使用正則表達(dá)式搜索文本,并把匹配的行打印出來。 ps -ef|grep java 就是通過管道的方式,將 ps 命令查詢出來的進(jìn)程信息內(nèi)容篩選出

    2024年02月14日
    瀏覽(49)
  • 【嵌入式開發(fā) Linux 常用命令系列 7.4 -- awk 處理文件名,去除后綴只保留文件名】

    請(qǐng)閱讀 【嵌入式開發(fā)學(xué)習(xí)必備專欄 】 在 shell 中, 可以使用 awk 來處理文件名,去除其后綴。下面是一個(gè)示例命令,它會(huì)將帶有后綴的文件名作為輸入,并輸出沒有后綴的文件名: 這個(gè)命令片段做了以下幾件事情: -F\\\".\\\" 設(shè)置了輸入字段的分隔符為點(diǎn)號(hào)( . ),這是文件后綴

    2024年04月08日
    瀏覽(129)
  • Linux 運(yùn)維常用命令

    先說些廢話 因?yàn)楣P者有著大量運(yùn)維部署站點(diǎn)的需求,所以之前一直在陸陸續(xù)續(xù)學(xué)習(xí)并實(shí)踐各種 Linux 的 Shell 命令,在此記錄一些高頻命令的使用的說明,方便自己回顧加深記憶。 后期如果有用到一些新的命令,也會(huì)繼續(xù)保持更新,如果寫的有不對(duì)的地方,也請(qǐng)各位看官指出,

    2024年02月16日
    瀏覽(28)
  • 運(yùn)維人必會(huì):Linux常用命令合集

    切換目錄: 查看文件與目錄的命令,list 的縮寫: 文本查找: 擁有強(qiáng)大的查找功能: 文件復(fù)制: 用于移動(dòng)文件: 刪除文件或目錄: 查看進(jìn)程: 用于向某個(gè)工作(%jobnumber)或者是某個(gè)PID(數(shù)字)傳送一個(gè)信號(hào): signal的常用參數(shù)如下: 用于向一個(gè)命令啟動(dòng)的進(jìn)程發(fā)送一個(gè)信

    2024年01月23日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包