だから私はここで私がしたいのと反対の質問を見つけました。同じヘッダーで複数のファイルを関連付ける。
ヘッダーの ">"文字に基づいて、2つのファイル(同じ部分文字列を持つそのファイルのディレクトリ内の何百ものファイルのうち)を1つのファイルにマージまたはリンクしようとしています。各ファイルには何千ものヘッダがありますが、私が添付したリンクで尋ねる質問とは異なり、ヘッダ以外の内容は同じなので、「>」で始まるすべての行以外は何も変更したくありません。
デフォルトでは、">"文字を共有してfile1とfile2を結合し、file1の内容を順番に保持したいと思います。
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
が追加の行と一致する必要がある場合は、他のオプションはスペースを2倍にしてファイルを合計File2
するpaste
ことです。
sed 'G' File2 | paste -d ' ' File1 -
一致しない行に余分なスペースがある場合でも、これが望ましくない場合は、区切り文字なしで各行File2
の先頭にスペースを挿入できます。paste
sed 's/^/ /; G' File2 | paste -d '' File1 -