所以我在这里发现了一个与我想做的相反的问题:连接具有相同标头的多个文件。
我正在尝试根据标头中的“>”字符将 2 个文件(在具有相同子字符串的对应文件的目录内的数百个文件中)合并或连接到一个文件中。每个文件中有数千个标题,与我附加的链接中提出的问题相反,标题以外的内容是相同的,所以我不想更改任何内容,除了以“>”开头的每一行。
本质上,我想通过共享字符“>”将 file1 与 file2 组合起来,并按顺序保留文件 1 的内容。
File1
> MGBNCNOSNC_142
9u2o4840204a9
> MGBNCNOSNC_143
AOISCJNWDCSNDCCW
> MGBNCNOSNC_144
AOISCJ40204DZZW
File2
>King_Henry
>Queen_jerry
>Jack_jill
Output
> MGBNCNOSCNC_142 > King_henry
9u2o4840204a9
> MGBNCNOSCNC_143 > Queen_jerry
AOISCJNWDC
> MGBNCNOSNC_144 > Jack_jill
gefSCJ40204DZZW
感谢您的帮助,如果我能更清楚的话请告诉我!
答案1
您可以将行读File2
入索引 awk 数组,然后依次将它们附加到File
awk '
NR==FNR {a[i++]=$0; next}
/^>/ {$0 = $0" "a[j++];}
{print}
' File2 File1
或者,如果您有 GNU sed (带有R
扩展名),您可以尝试
sed '/^>/ R File2' File1 | sed '/^>/ {N;s/\n/ /}'
如果您的File1
每一行都需要匹配一个附加行,则另一种选择可能是双倍空格File2
,然后将paste
文件放在一起
sed 'G' File2 | paste -d ' ' File1 -
尽管这会导致非匹配行中出现额外的尾随空格;如果这是不可取的,您可以在每File2
行的开头插入一个空格,并且paste
不带分隔符
sed 's/^/ /; G' File2 | paste -d '' File1 -