将文件的内容加入到新文件中

时间:2013-08-25 14:28:27

标签: awk

我有一些文本文件,如下所示。我想将这些文件的内容合并为一个。

档案A

>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    

你的帮助将不胜感激!

3 个答案:

答案 0 :(得分: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的“&gt; SDF”值,请告诉我们为什么会出现这种情况而不是“&gt; AXC”,因此我们可以编写适当的解决方案。

答案 1 :(得分:0)

比Ed的回答短一点

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

将以未指定的顺序打印块。

答案 2 :(得分:0)

  • RS=">">字符
  • 分隔记录
  • OFS="\n"是为了拥有它自己的行号。
  • 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