文本三剑客之awk

awk

它是对于文件中的行来进行操作,操作完后,可以根据指定命令来对行取列。

awk的分隔符:默认分隔符是空格键,多个空格会自动压缩成一个。

使用格式

awk 选项 ‘模式或条件(操作)’ 文件

相关命令

常用选项

F:指定分隔符,如果是空格,则不用加

-v:变量赋值
注:在awk中,操作默认打印

内置变量

$0:打印所有内容
$n:处理行的第几列
NR:处理的行的行号
NF:处理当前行的字段个数,$NF表示最后一个字段
FS:列分隔符,指定分隔符。与F作用一致  FS=“:”
OFS:输出文本的分隔符
RS:指定分隔符为回车

内置变量$n要加$,其他变量不用加,更不能用引号,也不能用括号,否则会被当成字符串处理。


awk内置函数:getline
1、如果getline左右没有重定向符号(<>)或(|)时,加了会先读第二行,在print前为偶数打印,在后为奇数打印。
2、如果加了符号,可以作用于定向输入文件。

将123.txt的内容重定向到456.txt中
awk '{getline < "123.txt";print > "456.txt"}' 123.txt
3、
getline ky30    自定义的变量

ls输出的结果传给ky30
ls | awk '{getline ky30;print $0,ky30;)'

打印

输出全部结果的同时打印行号
awk '{print NR,$0}' 123.txt     

输出1到3行的同时打印行号
awk 'NR==1,NR==4{print}' 123.txt      

输出1和3行的同时打印行号
awk 'NR==1;NR==4{print}' 123.txt

偶数行打印
awk 'NR%2==0{print}' 123.txt      

奇数行打印
awk 'NR%2==1{print}' 123.txt      

打印第三列和第一列
awk '{print $3,$1}' 123.txt     

条件判断

第4列小于10的行
awk -F: '$4<10{print}' /etc/passwd | head -n 15

取反
awk -F: '!($4<10){print}' /etc/passwd | head -n 15

第3列大于10的行,用if写
awk -F: '{if ($3>10) {print}}' /etc/passwd


三元表达式
awk '(条件表达式)?(A表达式或值):(B表达式或值)'  ?表示if :表示else

awk -F: '{i=($3<$4)?$3:$4;{print i}}' /etc/passwd

精确查找

$n~”字符串“      表示第n个字段包含某个字符

$n!~”字符串“     表示第n个字段**不**包含某个字符

$n==”字符串“     表示第n个字段就是某个字符

$n!=”字符串“     表示第n个字段**不是**某个字符

&&  且     ||  或

实例

查看CPU使用率

文本三剑客之awk_第1张图片

 

统计/etc下文件总大小

文本三剑客之awk_第2张图片

 

 

你可能感兴趣的:(linux,运维,服务器)