awk模式
BEGIN 和 END,BEGIN 被放置在沒有讀取任何數據之前,而 END 被放置在所有的數據讀取完成以后執行
體現如下: BEGIN{}: 讀入第一行文本之前執行的語句,一般用來初始化操作 {}: 逐行處理 END{}: 處理完最后一行文本后執行,一般用來處理輸出結果
分割字符串
awk規定引用系統變量必須使用單引號加雙引號,即'"$sysvar"'這樣的格式,
但是split函數也需要雙引號來定界,但這個雙引號又不能讓sh解釋,而應留給awk來解釋,所以使用了\"和\"組成的雙引號
s="0,1,2,3" awk 'BEGIN{split('"\"$s\""',myarray,","); for(i in myarray) {if(myarray[i]>1) print myarray[i]}}'
輸出2 3
分割字符串后與文件中字符匹配
文件內容:
xx|yy|000|aa|0|cc|cc|cc|
對於上述內容如果第5個字段可以匹配字符串s的字符,就打印輸出,否則濾掉
s="0,1,2,3" array=(${s//,/ }) #echo "${array[@]}" awk -F '|' 'BEGIN{split('"\"$s\""',myarray,",")} {for(i in myarray) {if($5 == myarray[i])print $0}}' text.txt
