在awk
(Ubuntu 16.04上的GNU Awk 4.1.3)中,在第一次出现分隔符时将字符串拆分为两个子串的最佳方法是什么(此处为:
) ,即使它包含更多的分隔符,它仍然保留下半部分?
我目前看起来像这样(简化)(为可见性添加了换行符):
awk '/^[^=]+:/ {
split($0, a, ":") ;
system("echo part 1: "a[1]) ;
print "part 2: "a[2] ;
}'
我需要调用一个外部应用程序,第一部分作为参数(这里仅使用echo
作为示例)并按原样打印第二部分,而不使用第一个分隔第1部分和第2部分的冒号,但是否则没有动过。
这里的问题是输入行可能包含多个冒号,导致分割成具有两个以上元素的数组。按照上面的方法,我会在第二次冒号之后忽略所有内容。
答案 0 :(得分:2)
请勿使用split
。使用index
:
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] ;
}'
答案 1 :(得分:2)
只需使用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