在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