2016-12-05 175 views
1

我有以下的文本文件:如何將包含鍵/值對的文件轉換爲CSV?

$ cat abc.txt 
URL: bbc.com 
Address:  10.10.10.5#53 
Address: 1.1.1.1 
Address: 6.6.6.6 
URL: cdn.com 
Address:  10.10.10.10#53 
Address: 2.2.2.2 
URL: ngo.com 
Address:  10.10.10.5#53 
Address: 3.3.3.3 
Address: 4.4.4.4 
Address: 5.5.5.5 

我想生成以下的輸出:

URL:   Server   Resolved  
bbc.com  10.10.10.5#53 1.1.1.1,6.6.6.6 
cdn.com  10.10.10.10#53 2.2.2.2 
ngo.com  10.10.10.5#53 3.3.3.3,4.4.4.4,5.5.5.5 

我嘗試這樣做:

awk 'ORS=($1 ~ "URL:")?",":"\n"' abc.txt 

但它不給我我想要的是。我怎樣才能做到這一點?

回答

0

我的想法是,URL:用作RS,所以我們可以從abc.txt獲取三條記錄。然後只打印一個記錄的奇數場。希望它能幫助你。 :)

$ cat abc.awk 
BEGIN{ 
    RS="URL:"; 
} 

{ 
    for(i=1;i<=NF;i+=2) 
    { 
     if (i<=3) 
      printf("%s\t", $i) 
     else if (i>3 && i<NF) 
      printf("%s, ", $i) 
     else 
      printf("%s\n", $i) 
    } 
} 

$ awk -f abc.awk abc.txt 
bbc.com 10.10.10.5#53 1.1.1.1, 6.6.6.6 
cdn.com 10.10.10.10#53 2.2.2.2 
ngo.com 10.10.10.5#53 3.3.3.3, 4.4.4.4, 5.5.5.5 
1

我沒有時間去思考這麼多,但現在開始,看看是否你可以工作,休息:

$ awk -v OFS='\t' ' 
    /URL/ { printf "%s%s%s", (NR>1?ORS:""), $2, OFS; c=0; next } 
    { printf "%s%s", $2, (c++?",":OFS) } 
    END { print "" } 
' abc.txt 
bbc.com 10.10.10.5#53 1.1.1.1,6.6.6.6, 
cdn.com 10.10.10.10#53 2.2.2.2, 
ngo.com 10.10.10.5#53 3.3.3.3,4.4.4.4,5.5.5.5, 
+1

謝謝你的時間。 –