婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 一天一個shell命令 linux文本內容操作系列-awk命令詳解

一天一個shell命令 linux文本內容操作系列-awk命令詳解

熱門標簽:測繪地圖標注名稱 天津電話外呼系統排名 鶴崗400電話申請 智能電銷機器人有用嗎 外呼電話系統怎么操作 怎么在百度地圖標注公司的位置 商機地圖標注 百度地圖標注直線距離 德陽400電話申請

簡介

awk是一個強大的文本分析工具,相對于grep的查找,sed的編輯,awk在其對數據分析并生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。
awk有3個不同版本: awk、nawk和gawk,未作特別說明,一般指gawk,gawk 是 AWK 的 GNU 版本。
awk其名稱得自于它的創始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首個字母。實際上 AWK 的確擁有自己的語言: AWK 程序設計語言 , 三位創建者已將它正式定義為“樣式掃描和處理語言”。它允許您創建簡短的程序,這些程序讀取輸入文件、為數據排序、處理數據、對輸入執行計算以及生成報表,還有無數其他的功能。

使用方法

awk '{pattern + action}' {filenames}

盡管操作可能會很復雜,但語法總是這樣,其中 pattern 表示 AWK 在數據中查找的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號({})不需要在程序中始終出現,但它們用于根據特定的模式對一系列指令進行分組。 pattern就是要表示的正則表達式,用斜杠括起來。

awk語言的最基本功能是在文件或者字符串中基于指定規則瀏覽和抽取信息,awk抽取信息后,才能進行其他文本操作。完整的awk腳本通常用來格式化文本文件中的信息。

通常,awk是以文件的一行為處理單位的。awk每接收文件的一行,然后執行相應的命令,來處理文本。

調用awk

有三種方式調用awk

說明:

awk被設計用于數據流,能夠對列和行進行操作。而sed更多的是匹配,進行替換和刪除。
awk有很多內建的功能,比如數組,函數等。靈活性是awk的最大優勢。

awk的結構
awk '
BEGIN{ print "start"}
pattern { commands }
END{ print "end"}'
file
為了偏于觀看,我打了回車,實際上是一行

一個awk腳本通常是3部分
1. BEGIN語句塊
2. 能夠使用模式匹配的通用語句塊
3. END語句塊
 他們任何一部分都可以不出現在腳本中。腳本通常包含在雙引號或者單引號內。
 例如:

awk 'BEGIN{i=0}{i++}END{print i}' filename 

工作原理

awk命令的工作方式如下:

1. 執行BEGIN{commands}語句塊中的語句
2. 從文件或者stdin中讀取一行,然后執行pattern{commands}. 迭代直到全部讀取完畢
3. 最后執行END{commands}語句塊

再次提醒,他們任何一部都可以沒有

而awk的功能也遠不止如此

入門實例:

復制代碼 代碼如下:

echo | awk '{var1="v1";var2="v2";var3="v3"; print var1,var2,var3;}' 
打印: v1 v2 v3 

解釋:逗號為定界符(分隔符)

echo | awk '{var1="v1";var2="v2";var3="v3"; print var1"-"var2"-"var3;}'

打印v1-v2-v3

解釋:雙引號為連接符

其他任何符號,都不能正常輸出v1,v2,v3

解讀--help(一個非常龐大復雜的幫助文檔,官方用了410頁的篇幅PDF來介紹,如果我只言片語,你信我自己都不信。。)

用法: awk [POSIX 或 GNU 風格選項] -f 腳本文件 [--] 文件 ...
用法: awk [POSIX 或 GNU 風格選項] [--] '程序' 文件 ...
POSIX 選項:             GNU 長選項:
     -f 腳本文件        --file=腳本文件
    -F fs            --field-separator=fs
指定輸入文本分隔符,fs是一個字符串或者是一個正則表達式,
    -v var=val        --assign=var=val
將外部變量值付給var
     -m[fr] val
     -O            --optimize
啟用一些優化程序的內部表示。
     -W compat        --compat
在兼容模式下運行awk。所以gawk的行為和標準的awk完全一樣,所有的awk擴展都被忽略。
     -W copyleft        --copyleft
打印簡短的版權信息
    -W copyright        --copyright
打印短版的通用公共許可證,然后退出
     -W dump-variables[=file]    --dump-variables[=file]
打印全局變量,其類型,提交的最終值的排序列表。
    -W exec=file        --exec=file
與-f類似,但與他有兩點不同,(我回頭把相關文檔上傳,太長)
    -W gen-po        --gen-po
(內容太多)
    -W help            --help 打印幫助
    -W lint[=fatal]        --lint[=fatal]
警告可疑或不移植到其他的awk實現的結構
     -W lint-old        --lint-old
打印關于不能向傳統unix平臺移植的結構的警告
     -W non-decimal-data    --non-decimal-data
啟用自動輸入數據的解釋,八進制和十六進制值
     -W profile[=file]    --profile[=file]
啟用awk程序剖析
     -W posix        --posix
在嚴格意義上的POSIX模式運作。
     -W re-interval        --re-interval
允許間隔表達式在正則表達式上
    -W source=program-text    --source=program-text
     -W traditional        --traditional
傳統的Unix awk的正則表達式匹配
     -W usage        --usage
     -W use-lc-numeric    --use-lc-numeric
解析數字輸入時,強制使用的語言環境中的小數點字符
 數據
 -W version        --version
提交錯誤報告請參考“gawk.info”中的“Bugs”頁,它位于打印版本中的“Reporting
 Problems and Bugs”一節

注意:gawk是awk的GNU版本,即使help ,在ubuntu下也需要先安裝gawk

這回我們就不解讀了,為了增加大家的信息和樂趣,先來點基本的:

部分特殊變量:

NR: 表示記錄數量,在執行過程中對應于行號
NF:表示字段數量,在執行過程中對應于當前行的字段數
$0: 這個變量包含執行過程中當前行的文本內容
$1: 第一個字段的文本內容
$2: 第二個字段的文本內容

例子:

例1.

復制代碼 代碼如下:

echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7"|\#這個\是在窗口中寫多行命令用的 
awk '{ 
print "Line no:"NR",No of fields:"NF, "$0="$0,"$1="$1,"$2="$2,"$3="$3 
}' 

小注一下:$1是打印第一個,$NF打印最后一個字段,$(NF-1)打印倒數第二個

 例2.

seq 5 | awk 'BEGIN{ sum=0;print "Summation:"}{print $1"+";sum+=1}END{print "==";print sum}'

這個例子用到了基本格式。

BEGIN中 初始化了sum,打印Summation
中間模塊打印了第一列,然后給sum+1

END中打印了sum

 例3. 關于-v 外部變量

復制代碼 代碼如下:

$ VAR=10000
$echo | awk –v VARIABLE=$VAR'{print VARABLE}'

還有另一種靈活的方法可以將多個外部變量傳遞給awk,例如:

復制代碼 代碼如下:

$var1="value1" var2="value2"
$echo | awk '{print v1,v2}' v1=$var1 v2=$var2

如果來自文件

awk '{print v1,v2}' v1=$var1 v2=$var2 filename

例4

$awk 'NR 5' #行號小于5
$awk 'NR==1,NR==4' #行號在1到5之間的行
$awk '/linux/' #包含樣式linux的行(可以用正則表達式指定樣式)
$awk '!/linux/' #不包含樣式linux的行

這次先寫這些,爭取在花2個篇幅能把awk做個比較全面的認識。

awk補充

之前我們學習了awk基本入門,我驚喜的發現有awk一篇詳細文章,有寫念頭,不能全部轉載,轉化成自己的方式來寫一些。

主講內置變量和部分字符串函數

內置變量(有翻譯特殊變量和環境變量,按照官方翻譯為內置變量)

變量

說明

$n 當前記錄的第n個字段,字段間由FS分隔。
$0 完整的輸入記錄。
ARGC 命令行參數的數目。
ARGIND 命令行中當前文件的位置(從0開始算)。
ARGV 包含命令行參數的數組。
BINMODE 在非POSIX系統上,這個變量指定的所有I / O使用二進制模式
CONVFMT 數字轉換格式(默認值為%.6g)
ENVIRON 環境變量關聯數組。
ERRNO 最后一個系統錯誤的描述。
FIELDWIDTHS 字段寬度列表(用空格鍵分隔)。
FILENAME 當前文件名。
FNR 同NR,但相對于當前文件
FPAT

這是一個正則表達式(字符串),告訴gawk基于匹配正則表達式的文本來創建字段

FS 字段分隔符(默認是任何空格)。
IGNORECASE 如果為真,則進行忽略大小寫的匹配。
LINT

當這個變量為真(非零或非空),gawk的行為猶如"--lint"命令行選項

NF 當前記錄中的字段數。
NR 當前記錄數。
OFMT 數字的輸出格式(默認值是%.6g)。
OFS 輸出字段分隔符(默認值是一個空格)。
ORS 輸出記錄分隔符(默認值是一個換行符)。
PROCINFO

這個數組的元素提供訪問運行awk程序的信息

RLENGTH 由match函數所匹配的字符串的長度。
RS 記錄分隔符(默認是一個換行符)。
RT 每次一條記錄被讀取的設置
RSTART 由match函數所匹配的字符串的第一個位置。

SUBSEP

數組下標分隔符(默認值是\034)。

TEXTDOMAIN 此變量用于程序的國際化

藍色為新增加的內置變量。

 

簡單舉例:

1.
01.sed 1q /etc/passwd | awk '{ FS = ":"; print $1 }'


打印密碼第一行,用冒號分隔符

2.

復制代碼 代碼如下:

awk 'END{print FILENAME}' awk.txt

打印文本FILENAME

3. seq 100 | awk 'NR==4,NR==6'

打印4到6行

 再介紹幾個awk內置的字符串函數,也講一部分。

length(string):
 返回字符串的長度

index(string,serch_string):
返回search_string在字符串中出現的位置

split(string,array,delimiter):
用定界符生成一個字符串列表,并將該列表存入數組

substr(string,array,delimiter):
 在字符串中用字符起止便宜量生成子串,并返回該子串

sub(regex,replacement_str,string):
將正則表達式匹配到的第一處內容替換成replacement_str

gsub(regex,replacement_str,string):
和sub()類似。不過該函數會替換正則表達式匹配到的所有內容

match(regex,string):
檢查正則表達式是否能夠匹配字符串。如果能夠匹配,返回非0值;否則,返回0.match()有兩個相關的特殊變量,分別是RSTART喝RLENGTH。變量RSTART包含正則表達式所匹配內容的其實位置,而變量RLENGTH包含正則表達式所匹配內容的長度。
 

舉例:

1.$ awk '{ sub(/test/, "mytest"); print }' testfile

在整個記錄中匹配,替換只發生在第一次匹配發生的時候

2.$ awk '{ sub(/test/, "mytest"); $1}; print }' testfile

在整個記錄的第一個域中進行匹配,替換只發生在第一次匹配發生的時候

3.$ awk '{ print index("test", "mytest") }' testfile

實例返回test在mytest的位置,結果應該是3

4.$ awk '{ print length( "test" ) }'

實例返回test字符串的長度。

awk補充二

這節可能要寫的比較粗了,時間太少。

一. 內置函數
注意一種約定俗稱語法習慣: [a]代表a可選.

數字函數(Numeric Functions)

函數名

說明

atan2(y,x) 返回y/x弧的反正切
cos(x) 返回x的余弦
exp(x) 返回x的指數
int(x) 返回最靠近的整數,風向標指向0
log(x) 返回x的自然對數
rand() 返回隨機數
sin(x) 返回x的正弦
sqrt(x) 返回x的正平方根
srand([x]) 生成隨機數,可以設置起點

字符串操作函數(String-Manipulation Functions)
注意:藍色部分為gawk特有,awk沒有此函數功能。

函數名

說明

asort(source [, dest [, how ] ]) 返回數組元素數(內容較多)
asorti(source [, dest [, how ] ]) 同asort,(有細微差別)
gensub(regexp, replacement, how [, target]) 搜索正則表達式RegExp匹配的regexp
gsub(regexp, replacement [, target]) 將正則表達式匹配的第一處內容替換成replacement_str
index(in, find) 返回find在字符串in中出現的位置
length([string]) string 中的字符數
match(string, regexp [, array]) 檢查正則表達式能否匹配字符串
patsplit(string, array [, fieldpat [, seps ] ])

劃分件到由fieldpat定義的字符串,并存儲在array里,分隔字符串存在在seps數組

split(string, array [, fieldsep [, seps ] ]) 用定界符生成一個字符串列表,并將該列表存入數組
sprintf(format, expression1, ...) 打印
strtonum(str) 字符轉轉換成數字
sub(regexp, replacement [, target]) 將正則表達式匹配到的第一處內容替換成replacement
substr(string, start [, length]) 分割字符串,根據其實位置和長度
tolower(string) 轉換成小寫
toupper(string) 轉換成大寫

輸入輸出函數(Input/Output Functions)

函數

說明

close(filename [, how]) 關閉文件輸入輸出流
fflush([filename]) 刷新與文件名相關的任何緩沖輸出
system(command) 執行操作系統命令,返回值給awk程序

 時間函數(Time Functions)

函數

說明

mktime(datespec) datespec為時間戳格式,與systime()格式一樣
strftime([format [, timestamp [, utc-flag]]]) 格式化timestamp的內容,返回日期格式
systime() 返回系統時間,精確到秒

 位操作函數(Bit-Manipulation Functions)

函數

說明

and(v1, v2) v1,v2的與操作結果
compl(val) val的反碼
lshift(val, count) 返回val左移count位的值
or(v1, v2) v1,v2的或操作
rshift(val, count) 返回val右移count位的值
xor(v1, v2) 返回v1,v2的異或的值

獲取類型信息(Getting Type Information)

函數

說明

isarray(x) 如果x是數組,返回true.否則false

字符串轉換函數(String-Translation Functions)

函數

說明

bindtextdomain(directory [, domain]) 設置awk要搜尋信息的目錄和域
dcgettext(string [, domain [, category]]) 返回的字符串string 翻譯文本域domain 的語言環境類別category
dcngettext(string1, string2, number [, domain [, category]])

返回string1和string2的翻譯數量的復數形式,string1,string2在語言環境類別的文本域里

內置函數還有些高級特性,等許多實例,以后有機會補充。

 二. 自定義函數

格式入下:

復制代碼 代碼如下:

function name([parameter-list])  
{  
  body-of-function  
}  

如:

復制代碼 代碼如下:

function myprint(num)  
{  
  printf "%6.3g\n", num  
}

 awk這個命令還有很多功能,打算就只寫這么多了。以后可能更多在一些例子里,與其他命令結合時會提到。

您可能感興趣的文章:
  • Linux awk將文件某列按照逗號分隔的例子
  • linux awk時間計算腳本及awk命令詳解
  • linux之awk命令的用法
  • Linux里awk中split函數的用法小結
  • Linux 中awk 提取包含某個關鍵字的段落

標簽:鎮江 優質小號 丹東 百色 自貢 滁州 武漢 六盤水

巨人網絡通訊聲明:本文標題《一天一個shell命令 linux文本內容操作系列-awk命令詳解》,本文關鍵詞  一天,一個,shell,命令,linux,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《一天一個shell命令 linux文本內容操作系列-awk命令詳解》相關的同類信息!
  • 本頁收集關于一天一個shell命令 linux文本內容操作系列-awk命令詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品国产三级国产aⅴ原创 | 777欧美精品| 国产人成一区二区三区影院| 久久成人麻豆午夜电影| 日韩欧美区一区二| 久久99国产精品久久99| 久久亚洲精精品中文字幕早川悠里| 蜜桃视频在线一区| 国产欧美日韩精品一区| 91一区二区三区在线观看| 亚洲日本va在线观看| 欧美日韩高清不卡| 国产一区啦啦啦在线观看| 亚洲人成网站在线| 欧美一区二区三区免费大片 | 亚洲国产精品激情在线观看| 成人国产精品免费观看| 一区二区久久久| 91麻豆精品国产91久久久| 国产综合久久久久久久久久久久| 国产精品网站在线播放| 91激情在线视频| 韩国中文字幕2020精品| 精品无码三级在线观看视频| 国产精品视频一二三| 欧美无人高清视频在线观看| 国产精品自拍一区| 亚洲v中文字幕| 中文字幕综合网| 亚洲精品一区二区三区影院| 91成人在线免费观看| 国产成人亚洲综合a∨婷婷图片| 亚洲午夜国产一区99re久久| 久久精品欧美日韩| 欧美酷刑日本凌虐凌虐| 不卡视频在线观看| 国产精品99久久久久久久vr| 视频一区免费在线观看| 欧美日韩国产高清一区二区| 色老汉一区二区三区| 制服丝袜成人动漫| 欧美激情一区二区三区不卡| 亚洲已满18点击进入久久| 蜜臀国产一区二区三区在线播放| 国产一区二区在线电影| 99精品桃花视频在线观看| 欧美中文字幕一区| 久久婷婷久久一区二区三区| 国产精品久久免费看| 亚洲gay无套男同| 成人一区在线看| 3d成人动漫网站| 国产精品久久二区二区| 香蕉成人伊视频在线观看| 国产精品夜夜爽| 蜜臀av性久久久久av蜜臀妖精| 无码av免费一区二区三区试看 | 亚洲日本va午夜在线影院| 视频一区二区中文字幕| 国产99久久久国产精品免费看| 成人av电影观看| 欧美无乱码久久久免费午夜一区| 久久久精品2019中文字幕之3| 亚洲人成在线播放网站岛国| 精品一区二区三区免费毛片爱 | 亚洲欧美另类图片小说| 日韩av电影天堂| 在线观看日韩高清av| 在线播放/欧美激情| 欧美国产在线观看| 麻豆成人免费电影| 欧美日韩视频在线一区二区| 亚洲欧洲日产国产综合网| 国产乱色国产精品免费视频| 色av一区二区| 亚洲私人影院在线观看| 丁香网亚洲国际| 久久午夜羞羞影院免费观看| 久久国产精品色| 日韩无一区二区| 免费在线看成人av| 欧美乱妇一区二区三区不卡视频| 亚洲精品自拍动漫在线| 99久久99久久精品国产片果冻| 国产精品私人自拍| 国产亚洲欧美日韩日本| 91精品国产91久久久久久最新毛片| 亚洲精品一线二线三线无人区| 国产精品人成在线观看免费 | 中文字幕在线观看不卡| 亚洲一二三四在线| 国产一区二区在线观看视频| av中文字幕一区| 欧美一区二区三区电影| 不卡的av网站| 欧美白人最猛性xxxxx69交| 日韩电影免费一区| 欧美大胆人体bbbb| 国产精品一卡二| 国产精品三级av| 97久久精品人人做人人爽| 亚洲激情成人在线| 欧美老人xxxx18| 青青草一区二区三区| 精品国产三级a在线观看| 国产精华液一区二区三区| 国产日产欧美一区| 一本色道综合亚洲| 处破女av一区二区| 一本久久综合亚洲鲁鲁五月天 | 日韩电影一区二区三区| 暴力调教一区二区三区| 精品理论电影在线| 丝瓜av网站精品一区二区 | 日韩美女精品在线| 韩国v欧美v日本v亚洲v| 欧美日韩国产123区| 亚洲视频一区在线| 懂色av噜噜一区二区三区av| 亚洲精品一线二线三线无人区| 天堂资源在线中文精品| 91久久精品一区二区三区| 欧美国产精品v| 国产精品一卡二卡| 久久免费视频一区| 精品一区二区三区久久久| 日韩免费看的电影| 久久99精品一区二区三区| 日韩一区二区影院| 日韩精品视频网| 欧美日韩免费一区二区三区视频| 一区二区三区免费网站| 在线影院国内精品| 亚洲一区二区视频在线观看| 欧美亚洲日本一区| 视频在线在亚洲| 精品国产91洋老外米糕| 精品午夜久久福利影院| 久久久精品tv| 91丨porny丨最新| 亚洲欧洲综合另类在线| 在线观看免费成人| 日韩成人伦理电影在线观看| 日韩一区二区电影在线| 国产精品香蕉一区二区三区| 国产精品福利av| 欧美日精品一区视频| 日韩精品乱码免费| 久久这里只有精品首页| 国产91精品一区二区| 亚洲美女一区二区三区| 欧美精品一二三四| 国产一区二区三区| 亚洲丝袜另类动漫二区| 欧美肥大bbwbbw高潮| 韩日欧美一区二区三区| 亚洲精品免费在线| 日本不卡视频在线观看| 亚洲另类春色国产| 国产精品久线在线观看| 久久亚洲二区三区| 日韩美女天天操| 日韩亚洲欧美高清| 日韩一区二区三区视频| 91精品国产综合久久久久久久 | 91亚洲国产成人精品一区二区三| 韩国精品主播一区二区在线观看 | av在线一区二区| caoporen国产精品视频| 成人免费观看男女羞羞视频| 国产夫妻精品视频| 激情欧美一区二区三区在线观看| 乱一区二区av| 久久国内精品自在自线400部| 毛片av中文字幕一区二区| 美女视频一区二区三区| 青娱乐精品在线视频| 日韩vs国产vs欧美| 老司机精品视频一区二区三区| 日韩精品一卡二卡三卡四卡无卡| 午夜精品一区二区三区电影天堂| 亚洲国产中文字幕在线视频综合| 亚洲综合激情另类小说区| 亚洲bt欧美bt精品| 奇米色一区二区| 国产一区二区三区免费观看| 精品无人区卡一卡二卡三乱码免费卡| 免费看欧美女人艹b| 日本亚洲三级在线| 久久国产生活片100| 久久久久久久久久久电影| 精品一区二区免费| 日韩在线a电影| 亚洲h精品动漫在线观看| 成人欧美一区二区三区白人| 久久精品视频免费| 精品噜噜噜噜久久久久久久久试看| 91精品在线观看入口| 欧洲在线/亚洲| 欧美性xxxxxx少妇|