Linux系统之文本格式化工具awk(3)

wKiom1NBOO6xV4-eAAH-1fUFdYs235.jpg

ARGV用法

wKiom1NBPEOCDyCCAAGXmCnWNTc876.jpg

之二

wKiom1NBPV-CBu10AAEFzoxinSo600.jpg

FILENAME用法

wKiom1NBPsPRXSriAANBI5SWlv4654.jpg

ENVIRON用法

wKioL1NBQifg6icPAAE1XFKBXtc198.jpg

注:

ARGV数组由ARGV[0]....ARGV[ARGC-1]组成,第一个元素是0而不是1,这与AWK中的般数组不同

ENVIROND数组在shell与AWK的交互中非常有用,使用ENVIRON["PARA_NAME"]来获取环境变量$PARA_NAME的值,其中引号“”不可少!

5、标准输出与重定向

⑴、输出重定向

print items > output-file

print items >> output-file

print items | command

⑵、特殊文件描述符:

/dev/stdin:标准输入

/dev/sdtout: 标准输出

/dev/stderr: 错误输出

/dev/fd/N: 某特定文件描述符,如/dev/stdin就相当于/dev/fd/0;

实例:

1

2

 

# awk -F" " '{printf "%-15s %i\n",$1,$3 > "/dev/stderr" }' /etc/issue

# awk -F" " '{printf "%-15s %i\n",$1,$3 > "/dev/null" }' /etc/issue

 

wKiom1NBStnDFP2pAAExjxe_fhc563.jpg

6、awk的操作符:

⑴、算术操作符:

-x: 负值

+x: 转换为数值;

x^y:

x**y: 次方

x*y: 乘法

x/y:除法

x+y:

x-y:

x%y:

实例

wKiom1NBTQrCngRtAAEi3k07gnM847.jpg

⑵、字符串操作符:

只有一个,而且不用写出来,用于实现字符串连接;

⑶、 赋值操作符:

=

+=

-=

*=

/=

%=

^=

**=

++

--

需要注意的是,如果某模式为=号,此时使用/=/可能会有语法错误,应以/[=]/替代;

⑷、布尔值

awk中,任何非0值或非空字符串都为真,反之就为假;

⑸、 比较操作符:

x < y    True if x is less than y.

x <= y    True if x is less than or equal to y.

x > y    True if x is greater than y.

x >= y    True if x is greater than or equal to y.

x == y    True if x is equal to y.

x != y    True if x is not equal to y.

x ~ y    True if the string x matches the regexp denoted by y.

x !~ y    True if the string x does not match the regexp denoted by y.

subscript in array  True if the array array has an element with the subscript subscript.

⑺、表达式间的逻辑关系符:

&&

||

实例:

wKioL1NBTj_RLuZNAAJCgtUvxKU570.jpg

⑻、条件表达式:

selector?if-true-exp:if-false-exp

if selector; then

 if-true-exp

else

 if-false-exp

fi

实例

wKiom1NBT1PiUUJJAAFOxwjTL9A175.jpg

⑼、函数调用:

function_name(para1,para2)

7、控制语句

⑴、 if-else

语法:

if (condition) {then-body} else {[ else-body ]}

实例:

1

2

3

4

 

#awk '{if ($3==0) {print $1, "Adminitrator";} else { print $1,"Common User"}}' /etc/passwd

#awk -F: '{if ($1=="root") print $1, "Admin"; else print $1, "Common User"}' /etc/passwd

#awk -F: '{if ($1=="root") printf "%-15s: %s\n", $1,"Admin"; else printf "%-15s: %s\n", $1, "Common User"}' /etc/passwd

#awk -F: -v sum=0 '{if ($3>=500) sum++}END{print sum}' /etc/passwd

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15553.html