shell編程系列19--文本處理三劍客之awk中的字符串函數

shell編程系列19--文本處理三劍客之awk中的字符串函數


字符串函數對照表(上)
函數名              解釋                函數返回值
length(str)         計算字符串長度            整數長度值
index(str1,str2)    在str1中查找str2的位置        返回值爲位置索引,從1開始計數
tolower(str)        轉換爲小寫            轉換後的小寫字符串
toupper(str)        轉換爲大寫            轉換後的大寫字符串
substr(str,m,n)        從str的m個字符開始,截取n位    截取後的子串
split(str,arr,fs)    按fs切割字符串,結果保存在arr    切割後的子串的個數
match(str,RE)        在str中按照RE查找,返回位置    返回索引位置

字符串函數對照表(下) 函數名 解釋 函數返回值 sub(RE,RepStr,str) 在str中搜索符合RE的字串,將其替換爲RepStr;只替換第一個 替換的個數 gsub(RE,RepStr,str) 在str中搜索符合RE的字串,將其替換爲RepStr;替換全部 替換的個數 awk中的字符串函數 length(str) 計算長度 index(str1,str2) 返回在str1中查詢到的str2的位置 tolower(str) 小寫轉換 toupper(str) 大寫轉換
split(str,arr,fs) 分隔字符串,並保持到數組中 match(str,RE) 返回正則表達式匹配到的子串的位置 substr(str,m,n) 截取子串,從m個字符開始,截取n位,n若不指定,則默認 sub(RE,RepStr,str) 替換查找到的第一個子串 gsub(RE,RepStr,str) 替換查找到的全部子串 1、以:爲分隔符,返回/etc/passwd中每行中每一個字段的長度 [root@localhost shell]# cat len.awk BEGIN{ FS=":" } { i=1 while(i<=NF) { if (i==NF) { printf "%d",length($i) } else { printf "%d:",length($i) } i++ } print "" } [root@localhost shell]# awk -f len.awk passwd 4:1:1:1:4:5:9 3:1:1:1:3:4:13 6:1:1:1:6:5:13 3:1:1:1:3:8:13 2:1:1:1:2:14:13 ... 2、搜索字符串"I have a dream"中出現"ea"字符串的位置 [root@localhost shell]# awk 'BEGIN{str="I have a gream";printf "%d\n",index(str,"ea")}' 12 3、將字符串"Hadoop is a bigdata Framework"所有轉換爲小寫 [root@localhost shell]# awk 'BEGIN{str="Hadoop is a bigdata Framework";print tolower(str)}' hadoop is a bigdata framework 4、將字符串"Hadoop is a bigdata Framework"所有轉換爲大寫 [root@localhost shell]# awk 'BEGIN{str="Hadoop is a bigdata Framework";print toupper(str)}' HADOOP IS A BIGDATA FRAMEWORK 5、將字符串"Hadoop Kafka Spark Storm HDFS YARN Zookeeper",按照空格爲分隔符,分隔 [root@localhost shell]# awk 'BEGIN{str="Hadoop Kafka Spark Storm HDFS YARN Zookeeper";split(str,arr);for (i in arr) print arr[i];}' Storm HDFS YARN Zookeeper Hadoop Kafka Spark 6、搜索字符串"Transaction 2345 Start:Select * from master"第一個數字出現的位置 [root@localhost shell]# awk 'BEGIN{str="Transaction 2345 Start:Select * from master";print match(str,/[0-9]/)}' 13 7、截取字符串"transaction start"的子串,截取條件從第4個字符開始,截取5位 [root@localhost shell]# awk 'BEGIN{str="transaction start";print substr(str,4,5)}' nsact 8、替換字符串"Transaction 243 Start,Event ID:9002"中第一個匹配到的數字串替換爲$符號 [root@localhost shell]# awk 'BEGIN{str="Transaction 243 Start,Event ID:9002";count=sub(/[0-9]+/,"$",str);print count;print str}' 1 Transaction $ Start,Event ID:9002 # gsub是替換所有匹配到的數字 [root@localhost shell]# awk 'BEGIN{str="Transaction 243 Start,Event ID:9002";count=gsub(/[0-9]+/,"$",str);print count;print str}' 2 Transaction $ Start,Event ID:$ # 在awk中數組下標從1開始 [root@localhost shell]# awk 'BEGIN{str="Hadoop Kafka Spark Storm HDFS YARN Zookeeper";split(str,arr," ");print arr[0]}' [root@localhost shell]# awk 'BEGIN{str="Hadoop Kafka Spark Storm HDFS YARN Zookeeper";split(str,arr," ");print arr[1]}' Hadoop [root@localhost shell]# awk 'BEGIN{str="Hadoop Kafka Spark Storm HDFS YARN Zookeeper";split(str,arr," ");print arr[2]}' Kafka [root@localhost shell]# awk 'BEGIN{str="Hadoop Kafka Spark Storm HDFS YARN Zookeeper";split(str,arr," ");for(i in arr) {print arr[i]}}' Storm HDFS YARN Zookeeper Hadoop Kafka Spark
相關文章
相關標籤/搜索