我有一些文本文件,如下所示。我想将这些文件的内容合二为一。
档案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
您的帮助将不胜感激!
我有一些文本文件,如下所示。我想将这些文件的内容合二为一。
档案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
您的帮助将不胜感激!
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 中的“>SDF”值,请告诉我们为什么会出现这种情况,而不是“AXC”,以便我们编写适当的解决方案。
比 Ed 的回答短一点
awk '/^>/{a=$0;next}{x[a]=x[a]$0"\n"}END{for(i in x)printf"%s\n%s",i,x[i]}'
块将以未指定的顺序打印。
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