2013-08-25 79 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