linux shell之awk
1 awk
awk 是一款設計用于數據流的工具,?awk有很多內建的功能,比如數組、函數等,這是它和C語言的相同之處
awk 腳本的結構基本如下所示:
awk 腳本通常由3部分組成。 BEGIN , END 和帶模式匹配選項的常見語句塊。這3個部分都是可選項,在腳本中可省略任意部分。
?
?
?
?
?
?
?
2 命令執行過程
awk 命令的工作方式如下所注。
(1) 執行 BEGIN { commands } 語句塊中的語句。
(2) 從文件或 stdin 中讀取一行,然后執行 pattern { commands } 。重復這個過程,直到文件全部被讀取完畢。
(3) 當讀至輸入流末尾時,執行 END { commands } 語句塊。
?
?
?
?
?
3 一般使用
1)普通執行一個最簡單的命令
echo -e "hello\nword" | awk 'BEGIN{print "chenyu"} {print} END{print "linux shell"}' chenyu hello word linux shell要記得打印是print "chenyu",這里是雙引號
?
?
?
?
2)帶參數打印
echo | awk '{var1="v1"; var2="v2"; var3="v3"; print var1 "-" var2 "-" var3}{}{}' v1-v2-v3echo | awk '{var1="v1"; var2="v2"; var3="v3"; print var1, var2, var3}{}{}' v1 v2 v3參數要用雙引號,打印print后面用,隔開
?
?
?
3?特殊變量
以下是可以用于 awk 的一些特殊變量。
NR :表示記錄數量,在執行過程中對應于當前行號。
NF :表示字段數量,在執行過程中對應于當前行的字段數。
$0 :這個變量包含執行過程中當前行的文本內容。
$1 :這個變量包含第一個字段的文本內容。
$2 :這個變量包含第二個字段的文本內容。
?
echo -e "chen gong yu\n chen cai feng\n chen zi xuan" | awk '{print "Line no:" NR ", all field:" NF, "$0 =" $0, "$1="$1, "$2="$2 "$3="$3}' Line no:1, all field:3 $0 =chen gong yu $1=chen $2=gong$3=yu Line no:2, all field:3 $0 = chen cai feng $1=chen $2=cai$3=feng Line no:3, all field:3 $0 = chen zi xuan $1=chen $2=zi$3=xuanecho -e "chen gong \n chen cai feng\n chen zi xuan" | awk '{print "Line no:" NR ", all field:" NF, "$0 =" $0, "$1="$1, "$2="$2 "$3="$3}' Line no:1, all field:2 $0 =chen gong $1=chen $2=gong$3= Line no:2, all field:3 $0 = chen cai feng $1=chen $2=cai$3=feng Line no:3, all field:3 $0 = chen zi xuan $1=chen $2=zi$3=xuanawk 的一些基本用法
?
?
1) 打印每一行的第2和第3個字段
?
?或者我們打印字一行字符串的第二個字符串
echo "hello word" | awk '{print $1}' hello輸出的命令得到的結果和awk組合使用
info1=$(md5sum 1.cpp | awk '{print $1}') info2=$(md5sum 1.cpp | awk '{print $2}') echo $info1 2f56b3e40c1bdd15feb924049e127b23 echo $info2 1.cpp?
?
?
2) 要統計文件中的行數
awk 'END{ print NR }' fileawk 'END{print NR}' 1.txt2?
?
3) awk默認是的字段定界符是空格,我們也可以用-F進行來指定如下
echo "chen*yu*ni*hao" | awk -F '*' '{print $3}' ni?
?
?
?
?
4?將外部變量值傳遞給 awk
方式1
value=chenyu echo | awk -v vvv=$value '{print vvv}' chenyu方式2
var1="chen" ; var2="yu" echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2 chen yu?
?
?
?
五:總結
一般我們要得到打印的字符串或者文本里面的第幾行的第幾個字段一般使用awk命令。
經典簡單用法如下:
value=$(echo "chen*yu*ni*hao" | awk -F '*' '{print $3}') echo $value ni?
value1=$(echo "chen yu ni hao" | awk '{print $3}') echo $value1 ni?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的linux shell之awk的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux shell之pushd、po
- 下一篇: linux shell之paste合并文