shell 之 gawk (二) 高階篇

2021-06-22 05:21:05 字數 2059 閱讀 4232

一、內建變數

1、欄位和記錄分隔符變數

fieldwidths  以空格分隔的數字列表,用空格定義每個資料字段的精確寬度

fs 輸入欄位的分隔符    (預設空格)

rs輸入記錄的分隔符   (預設換行符)

ofs輸出欄位的分隔符

ors輸出記錄的分隔符

2、資料變數

argc

argind

argv

convfmt

environ

errno

filename

fnrignorecase

nfnr

ofmt

rlength

rstart

例如:gawk 'begin ' data

gawk 'begin '

gawk 'begin ' /etc/passwd

fnr與nr的區別:

gawk 'begin ' data1 data1

fnr變數值在gawk處理第二個資料檔案時被重置,但nr會繼續增加

二、使用者定義的變數

1、在指令碼中賦值變數

$ gawk ' begin '

2、在命令列中賦值

$ cat script

begin

$ gawk -f script n=2 data

在begin中使用變數需要使用 -v

$ gawk -v n=3 -f script2 data

三、使用陣列  (關聯陣列)

1、定義陣列變數              var[index] = element

$ gawk 'begin '

$ gawk 'begin '

2、在陣列變數中遞迴

for( var in array)

statements

每次都向var分配array關聯陣列中的下乙個索引值;  索引值不是以一定的順序返回的

3、刪除陣列變數

delete  array[index]

四、使用模式

1、正規表示式

正規表示式必須出現在程式指令碼的左括號前面;

$ gawk 'begin /11/ ' data

2、匹配操作符 (波浪號~)

$1 ~ /^data/ 

如: $   gawk 'begin $2 ~ /^data2/'  data1

將data1 檔案中的 第二個資料字段與正規表示式進行比較,匹配的那行 列印出

如: $ gawk  -f: '$1 ~ /rich/ '  /etc/passwd

rich    /bin/bash

3、數學表示式    ==   <   <=    >   >=

$ gawk -f: '$4 == 0' /etc/passwd    (顯示所有屬於根使用者組的系統使用者)

五、結構化命令

1、 if 語句

if (conditin)

statement1

2、while語句

while (condition)

(支援break   ,  continue)

3、do-while語句

dowhile(condition)

4、for語句

與c語言一樣

5、格式化列印

printf  "format  string",  var1,  var2 .....  (與c類似)

如:$  gawk 'begin

>myprint()

>}' data2

3、建立函式庫

首先,建立函式庫檔案

$ cat funclib

function myprint()

function myrand()

不能將-f 與內嵌的gawk指令碼結合使用,因此:

要使用庫,只需要建立包含gawk程式的檔案,然後在命令列上指定庫檔案和程式檔案

$ cat script4

begin

myprint()

使用:$ gawk -f funclib -f script4 data2

shell日誌分析高階篇

前面我們說了shell分析日誌常用指令,現在我們隨ytkah一起看看shell日誌分析高階篇,假設日誌檔案為ytkah.log 統計不重複抓取數量 cat ytkah.log awk sort uniq wc l 統計所有狀態碼數量 awk ytkah.log sort uniq c 統計某個目錄抓...

shell日誌分析高階篇

前面我們說了shell分析日誌常用指令,現在我們隨ytkah一起看看shell日誌分析高階篇,假設日誌檔案為ytkah.log 統計不重複抓取數量 cat ytkah.log awk sort uniq wc l 統計所有狀態碼數量 awk ytkah.log sort uniq c 統計某個目錄抓...

lua 高階篇 二

第七章 迭代器與泛型for 迭代器是一種支援指標型別的結構,它可以遍歷集合的每乙個元素,在lua中我們常常使用函式來描述迭代器,每次呼叫該函式就返回集合的下乙個元素。一 迭代器與閉包 乙個簡單的例子 我們為乙個list寫乙個簡單的迭代器,與ipairs 不同的是我們實現的這個迭代器返回元素的值而不是...