Linux之awk 變數 運算子 if多分支

2022-07-19 09:27:09 字數 2446 閱讀 5450

一.awk語法

awk [options] 'commands' files

option

-f 定義字段分隔符,預設的分隔符是連續的空格或製表符

使用option中的-f引數定義間隔符號

用$1,$2,$3等的順序表示files中每行以間隔符號分隔的各列不同域

nf變數表示當前記錄的字段數

-v 定義變數並賦值 也可以借用次方式從shell變數中引入

二.變數

變數命名規則

以字母或下劃線開頭,剩下的部分可以是:字母、數字、下劃線.

最好遵循下述規範:

1.以字母開頭

2.使用中劃線或者下劃線做單詞的連線

3.同型別的用數字區分

4.對於檔案最好加上拓展名

nr 表示awk讀入的行數

fnr表示讀入行所在檔案中的行數

# awk '' file1 file2 

1 1 aaaaa

2 2 bbbbb

3 3 ccccc

4 1 dddddd

5 2 eeeeee

6 3 ffffff

#邏輯運算 可直接引用域進行運算

== >= <= != > < ~ !~

# awk 'nr==1 ' /etc/passwd

root:x:0:0:root:/root:/bin/bash

# 命令

讀後處理 end

nr 當前記錄的個數(全部檔案連線後的統計) 

fnr 當前記錄的個數(僅為當前檔案的統計,非全部)

fs 字段分隔符 預設為連續空格或製表符,可以使用多個不同的符號做分隔符 -f[:/]

ofs 輸出字元的分隔符 預設是空格

# awk -f: 'ofs="*****" ' /etc/passwd

root*****x

nf 當前讀入行的字段個數

ors 輸出記錄分隔符 預設是換行

# awk -f: 'ors="*****" ' /etc/passwd

root x*****bin x*****

filename 當前檔名

引用shell變數的方法

# a=root

# awk -v var=$a -f: '$1 == var ' /etc/passwd

或者 把整個命令拆開傳遞,讓shell變數外露,

# awk -f: '$1 == "'$a'" ' /etc/passwd

# a=nf

# awk -f: '' /etc/passwd

三.操作符

賦值= += -= /= *= 

邏輯與 邏輯或 邏輯非

&& || !

匹配正則或不匹配,正則需要用 /正則/ 包圍住

~ !~

關係 比較字串時要把字串用雙引號引起來

< <= > >= != ==

字段引用

$ 字段引用需要加$,而變數引用直接用變數名取

運算子+ - * / % ++ --

轉義序列

\\ \自身

\$ 轉義$

\t 製表符

\b 退格符

\r 回車符

\n 換行符

\c 取消換行

四.if (條件) 動作

若有多個動作,則要用大括號將動作體包含起來 if (條件)

# awk -f: '' /etc/passwd

root

# # awk -f: '}' /etc/passwd

root

/root

#if (條件1)

動作1else

動作2# awk -f: 'else print $6}' /etc/passwd

# awk -f: '' /etc/passwd

上面兩個命令是等價的,要麼用分號隔開,表示第乙個動作體的結束,要麼將動作體用大括號定位範圍

if (條件 1)

動作1else if(條件 2)

動作2else if(條件 3)

動作3else

動作4# awk -f: '' /etc/passwd

root23

...33

/home/seker

/bin/bash

36條件 ? 動作1 : 動作2

expr?action1:action2

# awk -f: 'var=($3 >= 500)?$1:"system_user" ' /etc/passwd

# awk -f: '' /etc/passwd

Awk運算子使用

加 減 乘 除 取餘 小例項 begin等 賦值運算子 加等於 減等於 乘等於 除等於 取模等於 小例項 begin大於 大於等於 小於 小於等於 等等於 不等於 小例項 begin邏輯運算最後返回的都是1或0 與 或 非 小例項 1.返回false begin返回false begin返回true...

Awk關係運算子和布林運算子

awk關係運算子和布林運算子 awk關係運算子及其意義 運算子意義 小於 大於 小於等於 大於等於 等於 不等於 匹配正規表示式 不匹配正規表示式 awk布林運算子及其意義 運算子意義 邏輯或 邏輯與!邏輯非 示例 awk begin 1 root etc passwd 列印 etc passwd ...

運算子之位運算子

右移 負數 無符號右移 或 異或 與 非 說明 位運算子都是作用在二進位製上的 比如 n 50 n 1 結果是多少?100 n 2 結果是多少?200 n 5 結果是多少?1600 為什麼會是這樣的呢?運算的邏輯如下 1,n 50 2,n的二進位制是 0011 0010 3,0011 0010 左移...