在awk中将字符串拆分为两部分
在在awk中将字符串拆分为两部分,awk,Awk,在awk(Ubuntu 16.04上的GNU awk 4.1.3)中,在第一次出现分隔符时(此处a:),将字符串拆分为两个子字符串的最佳方法是什么,即使它包含更多分隔符,也保持后半部不变 我当前拥有的外观(简化)如下所示(添加了换行符以提高可见性): 我需要使用第一部分作为参数调用外部应用程序(这里使用echo作为示例),并按原样打印第二部分,不使用分隔第1部分和第2部分的第一个冒号,但在其他方面未被触及 这里的问题是,输入行可能包含多个冒号,从而导致拆分为包含两个以上元素的数组。使用上面的方
awk
(Ubuntu 16.04上的GNU awk 4.1.3)中,在第一次出现分隔符时(此处a:
),将字符串拆分为两个子字符串的最佳方法是什么,即使它包含更多分隔符,也保持后半部不变
我当前拥有的外观(简化)如下所示(添加了换行符以提高可见性): 我需要使用第一部分作为参数调用外部应用程序(这里使用
echo
作为示例),并按原样打印第二部分,不使用分隔第1部分和第2部分的第一个冒号,但在其他方面未被触及
这里的问题是,输入行可能包含多个冒号,从而导致拆分为包含两个以上元素的数组。使用上面的方法,我只需忽略第二个冒号之后的所有内容。不要使用
split
。使用索引
:
awk '/^[^=]+:/ {
k=index($0, ":")
a[1]=substr($0,1,k-1)
a[2]=substr($0,k+1);
system("echo part 1: "a[1]) ;
print "part 2: "a[2] ;
}'
不要使用
split
。使用索引
:
awk '/^[^=]+:/ {
k=index($0, ":")
a[1]=substr($0,1,k-1)
a[2]=substr($0,k+1);
system("echo part 1: "a[1]) ;
print "part 2: "a[2] ;
}'
只需使用第三个参数
match()
:
只需使用第三个参数
match()
:
$ echo 'one:two:three:four' | awk '
match($0,/([^:]+):(.*)/,a) {
system("echo part 1: "a[1])
print "part 2: "a[2]
}'
part 1: one
part 2: two:three:four