2013-08-25 77 views
0

我有一些文本文件,如下所示。我想將這些文件的內容合併成一個。將文件內容加入新文件

文件中的

>AXC 
145 
146 
147 
>SDF 
1 
8 
67 
>FGH  

文件B

>AXC 
>SDF 
12 
65 
>FGH 
123 
156 
190 

期望輸出中

新文件

>AXC 
145 
146 
147 
>SDF 
1 
8 
67 
12 
65 
>FGH 
123 
156 
190  

您的幫助將不勝感激!

回答

0
awk ' 
    /^>/ { key=$0; if (!seen[key]++) keys[++numKeys] = key; next } 
    { vals[key] = vals[key] ORS $0 } 
    END{ for (keyNr=1;keyNr<=numKeys;keyNr++) {key = keys[keyNr]; print key vals[key]} } 
' fileA fileB 
>AXC 
145 
146 
147 
>SDF 
1 
8 
67 
12 
65 
>FGH 
123 
156 
190 

如果你真的想前置的空格添加到「>自衛隊」從的fileA值,告訴我們爲什麼這對一個案件,但不是「> AXC」這樣我們就可以編寫一個合適的解決方案。

0

比Ed的回答更短的位

awk '/^>/{a=$0;next}{x[a]=x[a]$0"\n"}END{for(i in x)printf"%s\n%s",i,x[i]}' 

塊將在未指定的順序進行打印。通過>字符

  • OFS="\n"

  • 0
    • RS=">"單獨的記錄是有數量的它自己的路線。
    • a[i]=a[i] $0將字段添加到第一個字段的索引數組中。
    • rt=RT是添加>字符指數

    $ awk 'BEGIN{ RS=">"; OFS="\n" } 
        {i=rt $1; $1=""; a[i]=a[i] $0; rt=RT; next} 
        END { for (i in a) {print i a[i] }}' d6 d5 
    
    >SDF 
    12 
    65 
    1 
    8 
    67 
    >FGH 
    123 
    156 
    190 
    >AXC 
    145 
    146 
    147 
    
    +1

    請添加一些解釋。僅有代碼的答案對未來的讀者不太有用,並且不解釋OP的錯誤或如何解決問題。 – Xufox