首先,split可以设定多个分隔符
例1.
输出下面这段文本,提取每行末尾的两个数字,如第一行提取185,5,第二行提取8,1
ERROR20121211 11:35:00[AppWorker] __LSE vec_txt_size:185 vec_pic_size:5
ERROR20121211 11:35:00[AppWorker] __LSE vec_txt_size:8 vec_pic_size:1
ERROR20121211 11:35:00[AppWorker] __LSE vec_txt_size:46 vec_pic_size:20
ERROR20121211 11:35:00[AppWorker] __LSE vec_txt_size:0 vec_pic_size:0
那么分割符可以设定为冒号或者空格。
awk -F"\t" '{
split($0,array,/[: ]/);
for(i=1;i<=length(array);i++)
print array[i]
}' $INPUTFILE
例2.
ArgLst = "5P12p89"
分割符设定为p或者P
split( ArgLst, Arr, /[Pp]/)
执行后 : Arr[1]=5, Arr[2]=12, Arr[3]=89
其次,-F也可以设定多个分隔符
一般而言,人们常用awk -F '\t'来表示分隔符,比如
awk -F '\t' '{print $1}' file1.txt
将处理文本file1.txt,用制表符(\t)分隔每一行,并打印其中第一列打印出来。
现在假设要处理一段文本,每行有多个分隔符号。比如现在需要提取下面这行文本中的pic之后的数字244和txt之后的数字246,
20130304 16:50:00 [normal predict] word:手机 pic:244 txt:246
如果能够指定分隔符既可以为空格,又可以为冒号,那么处理将会变得简单。可以使用正则表达式来指定多个分隔符,格式为 -F'[空格:]+' 如下
awk -F'[ :]+' '{print $NF"\t"$(NF-2)}' file1.txt
输出结果将为
244 246
例3
类似地,如果要指定(和,为分隔符,可以这么写
awk -F '[(,]' '{print $2"\t"$3}'