88. 通用字符串函数
以下是所有 awk 版本中都可用的常见 awk 字符串函数。
index()
index
函数可用于获取输入字符串中给定字符串(或字符)的索引(位置)。
在以下示例中,字符串 "Cali"
位于字符串 "CA is California"
中的位置编号 7 处。
您还可以使用索引来检查给定字符串(或字符)是否存在于输入字符串中。如果给定的字符串不存在,则返回位置为 0,这意味着给定的字符串不存在,如下所示。
$ cat index.awk
BEGIN {
state="CA is California"
print "String CA starts at location",index(state,"CA");
print "String Cali starts at location",index(state,"Cali");
if (index(state,"NY")==0)
print "String NY is not found in:", state
}
$ awk -f index.awk
String CA starts at location 1
String Cali starts at location 7
String NY is not found in: CA is California
length
length
函数返回字符串的长度。在下面的示例中,我们打印 「items.txt」 文件的每条记录中的字符总数
$ awk '{print length($0)}' items.txt
29
32
27
31
30
split()
语法:
split(input-string,output-array,separator)
此 split
函数将字符串拆分为单独的数组元素。 它需要以下三个参数。
input-string
:这是需要拆分为多个字符串的输入字符串。output-array
:该数组将包含分割字符串作为单独的元素separator
:用于分割输入字符串的分隔符。
对于此示例,原始 「items-sold.txt」 文件略有更改,以具有不同的字段分隔符,即用于分隔商品编号和销售数量的冒号。 在销售数量中,各个数量以逗号分隔。
因此,为了让我们计算特定商品的销售总数,我们应该采用第二个字段(即所有以逗号分隔的销售数量),使用逗号分隔符分割它们并将子字符串存储在数组中,然后循环遍历数组以添加数量。
$ cat items-sold1.txt
101:2,10,5,8,10,12
102:0,1,4,3,0,2
103:10,6,11,20,5,13
104:2,3,4,0,6,5
105:10,2,5,7,12,6
$ cat split.awk
BEGIN {
FS=":"
}
{
split($2,quantity,",");
total=0;
for (x in quantity)
total=total+quantity[x];
print "Item", $1, ":", total, "quantities sold";
}
$ awk -f split.awk items-sold1.txt
Item 101 : 47 quantities sold
Item 102 : 10 quantities sold
Item 103 : 65 quantities sold
Item 104 : 20 quantities sold
Item 105 : 42 quantities sold
substr()
语法:
substr(input-string, location, length)
substr
函数提取给定字符串的一部分。在上面的语法中:
input-string
:包含子字符串的输入字符串。location
:子字符串的起始位置。length
:从起始位置提取的字符总数。 该参数是可选的。 如果您未指定,它将从起始位置提取其余字符。
以下示例从第 5 个字符开始提取字符串并打印该行的其余部分。前 3 个字符是项目编号,第 4 个字符是逗号分隔符。因此,这会跳过项目编号并打印其余部分。
$ awk '{print substr($0,5)}' items.txt
HD Camcorder,Video,210,10
Refrigerator,Appliance,850,2
MP3 Player,Audio,270,15
Tennis Racket,Sports,190,20
Laser Printer,Office,475,5
从第一个字符(第二个字段)开始并打印 5 个字符:
$ awk -F"," '{print substr($2,1,5)}' items.txt
HD Ca
Refri
MP3 P
Tenni
Laser