簡體   English   中英

在awk中將字符串精確地分成兩部分

[英]Splitting a string into exactly two parts in awk

awk (GNU awk中4.1.3在Ubuntu 16.04),什么是分隔符的第一次出現分裂字符串轉換成正好有兩個子最好的辦法(這里: ),留下下半年,因為它是,即使它包含更多的分隔符?


我目前的外觀是這樣(簡化)的(為提高可見性而添加了換行符):

awk '/^[^=]+:/ { 
        split($0, a, ":") ; 
        system("echo part 1: "a[1]) ; 
        print "part 2: "a[2] ;
     }'

我需要以第一部分作為參數調用外部應用程序(此處僅作為示例使用echo )並按原樣打印第二部分,而沒有將第1部分和第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] ;
     }'

只需使用第三個參數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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM