日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

车载以太网之权威指南_awk权威指南之 终结篇!

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 车载以太网之权威指南_awk权威指南之 终结篇! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前段時間看了一下awk的使用選項,字段變量,標準變量,操作運算符,正則表達式,數組和控制流,并且也附帶著一些相關的案例,總的來說,在深入了解和使用AWK之后,還是帶來了很多的便利,在處理文本的文件的時候提供了更多的思路和便捷,比如按需自定義打印文本顯示格式,進行一些簡單的數據處理,同時awk還有和shell,python,go一些編程語言類似的循環,條件,邏輯處理,以及一些內置的函數更方便的幫助在命令行完成一些文本處理工作。今天完成了awk剩余的一些知識點學習。

awk中的循環

FOR

格式: for(initialisation;condition;increment/decrement)action

for 語句首先執行初始化動作( initialisation ),然后再檢查條件( condition )。如果條件為真,則執行動作( actio n ),然后執行遞增( increment )或者遞減( decrement )操作。只要條件為真循環就會一直執行。每次循環結束 都會進條件檢查,若條件為假則結束 循環

awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }' # 注意這里是++i,不是i++

while

While 循環會一直執行動作直到邏輯條件為假為止,AWK 首先檢查條件是否為真,若條件為真則執行動作。此過程一直重復直到條件為假時,則停止

awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }' # 等同上面的for語句

DO-WHILE

Do-While 循環與 While 循環相似,但是 Do-While 的條件測試放到了循環的尾部,在 do-while 循環中,無論條件是真是假,循環語句至少執行一次,執行后檢查條件真假,使用格式如下:

do action

while (condition)

看一個案例:

awk 'BEGIN {i = 1; do { print i; ++i } while (i < 6) }'

break

break 用以結束循環過程

awk 'BEGIN {

sum = 0; for (i = 0; i < 20; ++i) {

sum += i; if (sum > 50) break; else print "Sum =", sum }

}'

continue

Continue 語句用于在循環體內部結束本次循環,從而直接進入下一次循環迭代。當我們希望跳過循環中某處數據 處理時就會用到 Continue

awk 'BEGIN {for (i = 1; i <= 20; ++i) {if (i % 2 == 0) print i ; else continue} }'

EXIT

Exit 用于結束腳本程序的執行。該函數接受一個整數作為參數表示 AWK 進程結束狀態。如果沒有提供該參數,其默認狀態為 0

awk 'BEGIN {  ?  10022  12:34:02 ?

sum = 0; for (i = 0; i < 20; ++i) {

sum += i; if (sum > 50) exit(10); else print "Sum =", sum }

}'

Sum = 0

Sum = 1

Sum = 3

Sum = 6

Sum = 10

Sum = 15

Sum = 21

Sum = 28

Sum = 36

Sum = 45

root # echo ? #查看期退出的狀態碼為指定的10

10

內置函數

AWK 為程序開發者提供了豐富的內置函數。包括算術函數、字符串操作函數、時間操 作相關的函數、位操作函數以及其它各種各樣的函數

算術函數

  • exp(expr) 返回自然數e的expr次冪

awk 'BEGIN{printf "The exponential value of 5 is %f.\n",exp(5)}'

  • int(expr) 返回數值expr的整數部分

awk 'BEGIN {printf "34.1212的整數部分是: %d",int(34.1212)}'

awk 'BEGIN {param=4.232;result=int(param);printf "整數部分是:%d",result}'

  • log(expr) 返回自然對數

  • rand() 函數返回一個大于等于 0 小于 1 的隨機數 N(0<= N < 1)

  • sin(expr) 正弦函數返回角度 expr 的正弦值,角度以弧度為單位

  • sqrt(expr) 計算 expr 的平方根

  • srand([expr]) 使用種子值生成隨機數,數值 expr 作為隨機數生成器的種子值。如果沒有指定 expr 的值則函數默認使 用當前系統時間作為種子值

awk 'BEGIN { param = 10

printf "srand() = %d\n", srand()

printf "srand(%d) = %d\n", param, srand(param) }'

字符串函數

  • asort(arr,[, d [,how] ]) 函數使用 GAWK 值比較的一般規則排序 arr 中的內容,然后用以 1 開始的有序整數替換排序內容的索引

注意mac上的awk 20070501版本沒有該函數

awk 'BEGIN {

arr[0] = "Three"

arr[1] = "One"

arr[2] = "Two"

print "Array elements before sorting:";

for (i in arr) {

print arr[i]

}

asort(arr)

print "Array elements after sorting:"

for (i in arr) {

print arr[i]

}

}'

  • asorti(arr,[, d [,how] ]) asorti 函數的行為與 asort 函數的行為很相似,二者的差別在于 aosrt 對數組的值排序,而 asorti 對數組的索引 排序

  • gsub(regx,sub, string) gsub 是全局替換( global substitution )的縮寫。它將出現的子串(sub)替換為 regx。第三個參數 string 是可 選的,默認值為 $0,表示在整個輸入記錄中搜索子串

awk '{gsub("172.16.132.148","0.0.0.0");print }' docker-compose.yml # 替換docker-compose.yml中的172.16.132.148為0.0.0.0

  • index(str,sub) index 函數用于檢測字符串 sub 是否是 str 的子串。如果 sub 是 str 的子串,則返回子串 sub 在字符串 str 的開 始位置;若不是其子串,則返回 0。str 的字符位置索引從 1 開始計數

awk 'BEGIN {

str = "One Two Three"

subs = "Two"

ret = index(str, subs)

printf "Substring \"%s\" found at %d location.\n", subs, ret }'

  • length(str) 返回字符串的長度

  • match(str, regex) match 返回正則表達式在字符串 str 中第一個最長匹配的位置。如果匹配失敗則返回0。

  • split(str, arr,regex) split 函數使用正則表達式 regex 分割字符串 str。分割后的所有結果存儲在數組 arr 中。如果沒有指定 regex 則 使用 FS 切分。

awk 'BEGIN {

str = "One,Two,Three,Four"

split(str, arr, ",")

print "Array contains following values"

for (i in arr) { print arr[i]

} }'

  • sprintf(format,expr-list) sprintf 函數按指定的格式( format )將參數列表 expr-list 構造成字符串然后返回。

awk 'BEGIN {

str = sprintf("%s", "Hello, World !!!")

print str }'

  • strtonum(str) strtonum 將字符串 str 轉換為數值。如果字符串以 0 開始,則將其當作十進制數;如果字符串以 0x 或 0X 開 始,則將其當作十六進制數;否則,將其當作浮點數。

root@dev-node1:~# awk 'BEGIN {

> print "Decimal num = " strtonum("123")

> print "Octal num = " strtonum("0123")

> print "Hexadecimal num = " strtonum("0x123")

> }'

Decimal num = 123

Octal num = 83

Hexadecimal num = 291

  • sub(regex,sub,string)sub 函數執行一次子串替換。它將第一次出現的子串用 regex 替換。第三個參數是可選的,默認為 $0。

  • substr(str, start, l) substr 函數返回 str 字符串中從第 start 個字符開始長度為 l 的子串。如果沒有指定 l 的值,返回 str 從第 start 個字符開始的后綴子串

root@dev-node1:~# awk 'BEGIN {

str = "Hello, World !!!"; subs = substr(str, 1, 5);

print "Substring = " subs }'

Substring = Hello

root@dev-node1:~# awk 'BEGIN {

str = "Hello, World !!!"; subs = substr(str, 1);

print "Substring = " subs }'

Substring = Hello, World !!!

  • tolower(str) 此函數將字符串 str 中所有大寫字母轉換為小寫字母然后返回。注意,字符串 str 本身并不被改變。

  • toupper(str)此函數將字符串 str 中所有小寫字母轉換為大寫字母然后返回。注意,字符串 str 本身不被改變。

時間函數

  • systime 此函數返回從 Epoch 以來到當前時間的秒數

  • mktime(dataspec) 此函數將字符串 dataspec 轉換為與 systime 返回值相似的時間戳。dataspec 字符串的格式為 YYYY MM D D HH MM SS。

  • strftime([format [, timestamp[, utc-flag]]]) 函數根據 format 指定的格式將時間戳 timestamp 格式化

位操作函數

  • and 執行位與操作

  • compl 按位求補

  • lshift 左移位操作

awk 'BEGIN { num1 = 10

printf "lshift(%d) by 1 = %d\n", num1, lshift(num1, 1) }'

  • rshift 向右移位操作

  • or 按位或操作

  • xor 按位異或操作

其他函數

  • delete 被用于從數組中刪除元素

  • exit 該函數終止腳本執行。它可以接受可選的參數 expr 傳遞 AWK 返回狀態

  • flush 函數用于刷新打開文件或管道的緩沖區

  • getline 函數讀入下一行

  • next 停止處理當前記錄,并且進入到下一條記錄的處理過程

awk '{if ($0 ~/Shyam/) next; print $0}' marks.txt

  • nextfile 停止處理當前文件,從下一個文件第一個記錄開始處理

awk '{ if ($0 ~ /file1:str2/) nextfile; print $0 }' file1.txt file2.txt

  • return 用于從用戶自定義的函數中返回值。請注意,如果沒有指定返回值,那么的返回值是未定義的

cat << EOF >> functions.awk

function addition(num1, num2) {

result = num1 + num2

return result }

BEGIN {

res = addition(10, 20) print "10 + 20 = " res

}

EOF

  • system 函數可以執行特定的命令然后返回其退出狀態。返回值為 0 表示命令執行成功;非 0 表示命令執行失 敗

awk 'BEGIN { ret = system("date"); print "Return value = " ret }'

輸出重定向

  • 重定向操作符

awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'

  • 追加操作符

awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'

  • 管道 除了使用文件在程序之間傳遞數據之外,AWK 還提供使用管道將一個程序的輸出傳遞給另一個程序。這種重定 向方式會打開一個管道,將對象的值通過管道傳遞給管道另一端的進程,然后管道另一端的進程執行命令

awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'

  • 雙向通信通道 AWK 允許使用 |& 與一個外部進程通信,并且可以雙向通信。下面的例子中,我們仍然使用 tr 命令將字母轉換為 大寫字母

BEGIN {

cmd = "tr [a-z] [A-Z]"

print "hello, world !!!" |& cmd close(cmd, "to")

cmd |& getline out

print out;

close(cmd);

}

  • 第一條語句 cmd = "tr [a-z] [A-Z]" 在AWK 中建立了一個雙向的通信通道。

  • 第二條語句 print 為 tr 命令提供輸入。&| 表示雙向通信。

  • 第三條語句 close(cmd, "to") 執行后關閉 to 進程。

  • 第四條語句 cmd |& getline out 使用 getline 函數將輸出存儲到 out 變量中。

  • 接下來的輸出語句打印輸出的內容,最后 close 函數關閉 cmd

總結

以上是生活随笔為你收集整理的车载以太网之权威指南_awk权威指南之 终结篇!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。