/***************************************************************************/
awk的內置變量
awk 'BEGIN{}pattern{command}END{}'
總結:內置變量
$0 打印出行所有信息
awk '{print $0}' /etc/passwd
$1-$n 打印行的第1到n個字段的信息
awk 'BEGIN{FS=":"}{print $1}' /etc/passwd
NF (Number Field) 處理行的字段個數
awk '{print NF}' list
NR (Number Row) 處理行的行號
awk '{print NR}' list /etc/passwd 后面指定的文件行數累加
FNR (File Number Row) 多文件處理時,每個文件單獨記錄行號
awk 'print FNR' list /etc/passwd
FS (Filed Separator) 字段分割符,不指定時默認以空格或tab鍵做分割
awk 'BEGIN{FS="|"}{print $2}' list
RS 行分割符,不指定時以回車換行分割
awk 'BEGIN{FS="|";RS="---"}{print $2}' list
OFS (Output Filed Separator) 輸出字段分割符
awk 'BEGIN{RS="--";FS="|";ORS="&";OFS=":"}{print $1,$3}' list
ORS (Output Row Separator) 輸出行分隔符
awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $3}' list
FILENAME 處理文件的文件名
awk '{print FILENAME}' list
ARGC 命令行參數的個數
awk '{print ARGC}' list
ARGV 命令行參數數組
awk格式化輸出之printf總結
%s 打印字符串
%d 打印10進制數
%f 打印浮點數
%x 打印16進制數
%o 打印8進制數
%e 打印數字的科學計數法格式
%c 打印單個字符的ASCII碼
修飾符
- 左對齊
+ 右對齊
# 顯示8進制在前面加0 顯示16進制在前面加0x
格式示例:
1、以字符串格式打印/etc/passwd中的第七個字段
awk 'BEGIN{FS=":"}{printf "%s",$7}' /etc/passwd
2、以10進制格式打印/etc/passwd中的第三個字段,以":"作為分隔符
awk 'BEGIN{FS=":"} {printf "%d\n",$3}' /etc/passwd
3、以浮點數格式打印/etc/passwd中的第三個字段,以":"作為分隔符
awk 'BEGIN{FS=":"} {printf "%f\n",$3}' /etc/passwd
4、以16進制數格式打印/etc/passwd中的第三個字段,以":"作為分隔符
awk 'BEGIN{FS=":"} {printf "%x\n",$3}' /etc/passwd
5、以8進制格式打印/etc/passwd中的第三個字段,以":"作為分隔符
awk 'BEGIN{FS=":"} {printf "%o\n",$3}' /etc/passwd
6、以科學計數法格式打印/etc/passwd中的第三個字段,以":"作為分隔符
awk 'BEGIN{FS=":"} {printf "%e\n",$3}' /etc/passwd
修飾符示例:
1左對齊格式
2右對齊格式
3打印8進制或者16進制是在前面加#
/********************************************************************************/
awk模式匹配用法總結:
①、RegExp
②、運算符匹配
1、RegExp
匹配/etc/passwd文件中含有root字符串的所有行
awk 'BRGIN{FS=":"}/root/{print $0}' /etc/passwd
匹配/etc/passwd文件行中以yarn開頭的所有行
awk 'BRGIN{FS=":"}/^yarn/{print $0}' /etc/passwd
2、運算符匹配
關系運算符匹配
< 小于
> 大于
<= 小于等于
>= 大于等于
== 等于
!= 不等于
~ 匹配正則表達式
1、以:為分隔符,匹配/etc/passwd文件中第3個字段小于50的所有行信息
awk 'BEGIN{FS=":"}$3<50{print $0}' /etc/passwd
2、以:為分隔符,匹配/etc/passwd文件中第3個字段大于50的所有行信息
awk 'BEGIN{FS=":"}$3>50{print $0}' /etc/passwd
3、以:為分隔符,匹配/etc/passwd文件中第7個字段為/bin/bash的所有行信息
awk 'BEGIN{FS=":"}$7=="/bin/bash"{print $0}' /etc/passwd
4、以:為分隔符,匹配/etc/passwd文件中第7個字段不為/bin/bash的所有行信息
awk 'BEGIN{FS=":"}$7!="/bin/bash" /etc/passwd
5、以:為分隔符,匹配/etc/passwd文件中第3個字段包含3個以上數字的所有行信息
awk 'BEGIN{FS=":"}$3~/[0-9]{3,}/{print $0}' /etc/passwd
布爾運算符匹配
|| 或
&& 與
! 非
1:以:分隔符,匹配/etc/passwd文件中包含hdfs或者yarn的所有行信息
awk 'BEGIN{FS=":"}$1=="hdfs"||$1=="yarn"{print $0}' /etc/passwd
2:以:分隔符,匹配/etc/passwd文件中第三個字段小于50并且第四個字段大于50的所有行信息
awk 'BEGIN{FS=":"}$3<50 && $4>50{print $0}' /etc/passwd
awk的基本運算
+ 加
- 減
* 乘
/ 除
% 取模
^或** 乘方
++x 在返回x變量之前,x變量加1
x++ 在返回x變量之后,x變量加1
--x 在返回x變量之前,x變量減1
x-- 在返回x變量之后,x變量減1
1 使用awk計算/etc/services中空白的行數量
2 計算學生課程分數的平均值 學生課程文件如下
3 使用awk輸出/etc/passwd文件的行數 分兩種方式進行顯示行數
shell編程之awk
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。