shell腳本--文本處理三劍客之awk內置變量

wak簡介,wak是一個文本處理工具,通常用於處理數據並生成結果報告

awk的命名是他的創始人AIfred Aho ,Peter Weinberger和Brian Kernighan的姓氏的首字母組成的

語法格式

第一種形式對文件操作

awk 'BEGIN{}pattern{commands}END{}' file_name

第二種形式對輸出處理

standard output | awk 'BEGIN{}pattern{commands}END{}'

語法格式說明

語法格式                    解釋
BEGIN{}                正式處理數據之前執行
pattern                匹配模式
{commands}             處理命令,可多行
END{}                  處理完成所有匹配數據後執行

awk的內置變量 內置變量之間 用 ;(分號進行分割)

內置變量                    含義

$0                       整行內容
$1-$n                    當前行的字段個數,也就是有多少列
NF                       當前行的行號 ,從1開始計數
FNR                      多文件處理時,每個文件行號單獨計數,都是從0開始
FS                       輸入字段分隔符,不指定默認以空格或tab建分割
RS                       輸入分行分割符,默認回車換行
OFS                      輸出字段分隔符,默認爲空格
ORS                      輸出行分隔符,默認爲回車換行
FILENAME                 當前輸入的文件名字
ARGC                     命令行參數個數
ARGV                     命令行參數數組

$0輸出全行 

$ awk '{print $0}' passwd

FS 以分隔符 : 分割字符並輸出 第一個字段

$ awk 'BEGIN{FS=":"}{print $1}' passwd
結果
root
.....

NF輸出打印的當前字段 

$ awk '{print NF}' passwd 
1

NR打印當前行號 NR不會重新計算

打印行號
awk '{print NR}' passswd

 NR打印當前行號 份文件 NR不會重新計算

打印行號份文件不會重新計算
awk '{print NR}' list /etc/passwd

 FNR打印當前行號 FRN 會對份文件行號進行重新計算

打印行號份文件不會重新計算
awk '{print FNR}' list /etc/passwd

RS行分隔符 

awk 'BEGIN{FS=":";RS="---"}{print $2}' passwd

 RS行分隔符  指定---爲分隔符並進行 $0全輸出

awk 'BEGIN{RS="---"}{print $0}' passwd

 輸出行分隔符 :ORS="&" print默認輸出行分隔符是 換行符

awk 'BEGIN{RS="---";FS="|";ORS="&"}{print $3}' list

 輸出分隔符 :OFS="&" print默認輸出分隔符是 空格

awk 'BEGIN{RS="---";FS="|";ORS="&";OFS=":"}{print $1,$3}' list

FILENAME輸出文件名字 文件有多少行輸出多少次 

$ awk '{print FILENAME}' passwd 
passwd

當前行處理參數 

 awk '{print ARGC}' passwd 
2

print $NF NF的變量代表的是字段的個數 

$ awk 'BEGIN{FS=":"}{print $NF}' passwd 
/bin/bash

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章