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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux之awk命令学习笔记

發(fā)布時間:2023/12/19 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux之awk命令学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Linux之a(chǎn)wk命令學(xué)習(xí)筆記

前言

AWK 是一種處理文本文件的語言,是一個強(qiáng)大的文本分析工具。

之所以叫 AWK 是因為其取了三位創(chuàng)始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

語法

awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

  • [-F|-f|-v] 大參數(shù),-F指定分隔符(字符串或正則表達(dá)式),-f調(diào)用腳本,-v定義變量 var=value
  • ’ ’ 引用代碼塊
  • BEGIN 初始化代碼塊,在對每一行進(jìn)行處理之前,初始化代碼,主要是引用全局變量,設(shè)置FS分隔符
  • // 匹配代碼塊,可以是字符串或正則表達(dá)式
  • {} 命令代碼塊,包含一條或多條命令
  • ; 多條命令使用分號分隔
  • END 結(jié)尾代碼塊,在對每一行進(jìn)行處理之后再執(zhí)行的代碼塊,主要是進(jìn)行最終計算或輸出結(jié)尾摘要信息

基本用法

test.txt文本內(nèi)容如下:

2 this is a awk test 3 Are you like XDU This's a test 10 There are vivado,hls,modelsim,tcl

用法一:

awk '{[pattern] action}' {filenames} # 行匹配語句 awk '' 只能用單引號

實例:

awk '{print $1,$4}' test.txt # 每行按空格或TAB分割,輸出文本中的1、4項 #output: 2 a 3 like This's 10 vivado,hls,modelsim,tclawk '{printf "%-8s %-10s\n",$1,$4}' test.txt #格式化輸出,按一定的間距輸出 #output: 2 a 3 like This's 10 vivado,hls,modelsim,tcl

用法二:

awk -F #-F相當(dāng)于內(nèi)置變量FS, 指定分割字符

實例:

awk -F, '{print $1,$2}' test.txt #使用","分割 #output: 2 this is a awk test 3 Are you like XDU This's a test 10 There are vivado hlsawk 'BEGIN{FS=","}{print $1,$2}' test.txt # 或者使用內(nèi)建變量FS進(jìn)行分割 #output: 2 this is a awk test 3 Are you like XDU This's a test 10 There are vivado hlsawk -F '[ ,]' '{print $1,$2,$5}' test.txt #使用多個分割符,對空格和","均進(jìn)行分割操作 #output: 2 this awk 3 Are XDU This's a 10 There hls

用法三:

awk -v # 設(shè)置變量

實例:

awk -v a=1 '{print $1,$1+a}' test.txt #設(shè)置初始變量為a,且a=1 #output: 2 3 3 4 This's 1 10 11awk -v a=1 -v b=s '{print $1,$1+a,$1b}' test.txt #設(shè)置初始字符變量為b,注意字符變量不能用于運(yùn)算 #output: 2 3 2s 3 4 3s This's 1 This'ss 10 11 10s

用法四:

awk -f {awk腳本} {文件名}

實例:

awk -f cal.awk test.txt

運(yùn)算符

運(yùn)算符描述
= += -= *= /= %= ^= **=賦值
?:C條件表達(dá)式
||邏輯或
&&邏輯與
~ 和 !~匹配正則表達(dá)式和不匹配正則表達(dá)式
< <= > >= != ==關(guān)系運(yùn)算符
空格連接
+ -加,減
* / %乘,除與求余
+ - !一元加,減和邏輯非
^ ***求冪
++ –增加或減少,作為前綴或后綴
$字段引用
in數(shù)組成員

實例:

awk '$1>2' test.txt #輸出第一列大于2的行 #output: 3 Are you like XDU This's a test 10 There are vivado,hls,modelsim,tclawk '$1==2 {print $1,$3}' test.txt #找到第一列等于2的行,并打印第一和第三個字符(以空格或者TAB分隔開) #output: 2 isawk '$1>2 && $2=="Are" {print $1,$3}' test.txt #找到第一列大于2并且第二列等于"Are"的行 #output: 3 you

使用正則,字符串匹配

awk '$2 ~ /th/ {print $2,$4}' test.txt # 找到第二列包含 "th"的行,并打印該行的第二列與第四列 #output: this a

~表示模式開始。//中是模式。

awk '/re/' test.txt #輸出包含"re"的行 #output: 3 Are you like XDU 10 There are vivado,hls,modelsim,tcl

忽略大小寫

awk 'BEGIN{IGNORECASE=1}/THIS/' test.txt #打印含"THIS"的行,忽略大小寫區(qū)別 #output: 2 this is a awk test This's a test

模式取反

awk '$2 !~ /th/ {print $2,$4}' test.txt #取出第二列不含"th"的行,并打印出該行的第二和第四列 #output: Are like a There vivado,hls,modelsim,tclawk '! /th/ {print $2,$4}' test.txt #output: Are like a There vivado,hls,modelsim,tcl

awk腳本

關(guān)鍵詞BEGIN和AND

  • BEGIN{ 這里面放的是執(zhí)行前的語句 }
  • END {這里面放的是處理完所有的行后要執(zhí)行的語句 }
  • {這里面放的是處理每一行時要執(zhí)行的語句}

awk腳本如下:

$ cat cal.awk #!/bin/awk -f #運(yùn)行前 BEGIN {math = 0english = 0computer = 0printf "NAME NO. MATH ENGLISH COMPUTER TOTAL\n"printf "---------------------------------------------\n" } #運(yùn)行中 {math+=$3english+=$4computer+=$5printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5 } #運(yùn)行后 END {printf "---------------------------------------------\n"printf " TOTAL:%10d %8d %8d \n", math, english, computerprintf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR }

執(zhí)行結(jié)果如下:

awk -f cal.awk score.txt NAME NO. MATH ENGLISH COMPUTER TOTAL --------------------------------------------- Marry 2143 78 84 77 239 Jack 2321 66 78 45 189 Tom 2122 48 77 71 196 Mike 2537 87 97 95 279 Bob 2415 40 57 62 159 ---------------------------------------------TOTAL: 319 393 350 AVERAGE: 63.80 78.60 70.00

總結(jié)

以上是生活随笔為你收集整理的linux之awk命令学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。