日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

awk 分解行、字段

發布時間:2024/10/12 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 awk 分解行、字段 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 格式

格式: awk 'pattern {action} pattern {action}' filename 注:多個文件時,讀取從左到右,讀完第一個再讀取第二個 pattern1-/正則表達式/:使用通配符的擴展集。2-關系表達式: 可以是字符串或數字的比較,如$2>$1選擇第二個字段比第一個字段長的行。3-模式匹配表達式:~ 匹配; ~! 不配置4-BEGIN:讓用戶指定在第一條輸入記錄被處理之前所發生的動作,通常可在這里設置全局變量。5-END:讓用戶在最后一條輸入記錄被讀取之后發生的動作。

1.1 action

//由一或多個命令、函數、表達式組成,之間由換行符\或;分號隔開,并位于大括號內。主要有四部份:變量或數組賦值輸出命令內置函數控制流命令也可以調用外部shell,使用system指令(參見詳解知識點)。-v var=val 變量, 可外部指定一個變量,在{}中使用

1.2 awk內部變量名

$0 完整的輸入記錄-即當期的完整行 $n 當前記錄的第n個字段,字段間由FS分隔。 NF 每一行($0)擁有的字段數; NR 目前awk處理的是“總共第幾行”數據;FNR 在當前文件的多少行!(多文件處理時用到) FS 指定被處理文件的分割字符,默認空格鍵,如 awk -F'[;:]' OFS 輸出字段分隔符(默認值是一個空格)。awk -F:'{print $1,$3}' OFS="\t" passwd.dat FS 目前的分割字符,默認空格鍵 ARGC 命令行參數的數目。 ARGIND 命令行中當前文件的位置(從0開始算)。 ARGV 包含命令行參數的數組。 CONVFMT 數字轉換格式(默認值為%.6g) ENVIRON 環境變量關聯數組。 ERRNO 最后一個系統錯誤的描述。 FIELDWIDTHS 字段寬度列表(用空格鍵分隔)。 FILENAME 當前文件名。 IGNORECASE 如果為真,則進行忽略大小寫的匹配。 NF 當前記錄中的字段數。 OFMT 數字的輸出格式(默認值是%.6g)。 ORS 輸出記錄分隔符(默認值是一個換行符)。 RLENGTH 由match函數所匹配的字符串的長度。 RS 記錄分隔符(默認是一個換行符)。 RSTART 由match函數所匹配的字符串的第一個位置。 SUBSEP 數組下標分隔符(默認值是\034)。

1.3 awk內置函數

//字符串相關 gsub(r,s) 在整個$0中用s代替r gsub(r,s,t) 在整個t中用s替代r index(s,t) 返回s中字符串t的第一位置 length(s) 返回s長度,如果未給出String參數,則返回整條記錄的長度 match(s,r) 測試s是否包含匹配r的字符串 split(s,a,fs) 以fs為分隔符將s分成序列a sprint(fmt,exp) 返回經fmt格式化后的exp sub(r,s) 用$0中最左邊最長的子串代替s substr(s,p) 返回字符串s中從p開始的后綴部分 substr(s,p,n) 返回字符串s中從p開始長度為n的后綴部分 tolower( String ) toupper( String )//時間函數 //示例 awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}' //2001年01月01日 星期一 12時12分12秒 mktime( YYYY MM DD HH MM SS[ DST]) 生成時間格式 strftime([format [, timestamp]]) 格式化時間輸出,將時間戳轉為時間字符串 systime() 得到時間戳,返回從1970年1月1日開始到當前時間(不計閏年)的整秒數

1.4 awk操作符-運算符

in 是否數組成員 //{if ($2 in a)print $0}

2. 使用示例

awk -F '|' '$2>3 {print $1}' data.cvs //打印指定字段 {print $1} 序號1開始指定分隔符 -F '|' (可多個分隔符) awk -F '|' '$2>3 {print $1}' awk -F 'ms' '{print $1}' //可使用字符串分割(不可多個字符串) awk -F"[@ /t]" '{print $2,$3}' test //以@,空格,Tab鍵分割test文件的每一行,并輸出第二、第三列。(不可多字符串)//只展示匹配的行 $ awk '$4 ~/Technology/' //只第4個字段匹配的行 (不匹配 ~!) $ awk '$1 ~/^root/' test //將顯示test文件第一列中以root開頭的行。//調用外部shell ls -l |awk '$1~/^d/{system("du -s "$9)}' //篩選出當前目錄下的左右文件夾并顯示大小。//過濾出兩個文件中相同行 awk -F'[/,]' 'NR==FNR{a[$1]=$1}NR>FNR{if ($2 in a) print $0}' b a >c //推薦,先將記錄放在數組中!//求平均值/求和 awk '{sum+=$1} END {print "Average = ", sum/NR}'//刪除特定文件外的所有其它文件 rm -rf `ls -lrt|awk '{if(match($0,".bes.cm.")) print $9}' |awk '{if( !(match($0,"bes.cm.base.meta.object-") || match($0,"bes.cm.base.meta.sdk-") || match($0,".bes.cm.base.sdk-") )) print $0}'`* / % || && > >= == !=

轉載于:https://www.cnblogs.com/Desneo/p/7212386.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的awk 分解行、字段的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。