何千もの類似したファイルがあり、そのファイルのパターンの後にそれぞれの名前を書きたいと思います。たとえば、
**ファイル1の名前はnexus0000です。
ファイルには以下が含まれます。
>Pseudomonas_1M
ATGATCCGCTTCGAGCAGGTCGGCAAACGCTATC
>Pseudomonas_2M
GTGAGCTTCGAGCAGGTCGGCGAGCCGCTATC
私はこれを得たいと思います:
nexus0000>Pseudomonas_1M
ATGATCCGCTTCGAGCAGGTCGGCAAACGCTATC
nexus0000>Pseudomonas_2M
GTGAGCTTCGAGCAGGTCGGCGAGCCGCTATC
**ファイル2の名前はnexus0001です。
ファイルには以下が含まれます。
>Pseudomonas_1M
ATGATCCGCTTCGAGCAGGTCGGCAAACGCTATC
>Pseudomonas_2M
GTGAGCTTCGAGCAGGTCGGCGAGCCGCTATC
私はこれを得たいと思います:
nexus0001>Pseudomonas_1M
ATGATCCGCTTCGAGCAGGTCGGCAAACGCTATC
nexus0001>Pseudomonas_2M
GTGAGCTTCGAGCAGGTCGGCGAGCCGCTATC
など。
これまでは、次を使用して最初の行にのみファイル名を書き込むことができます。
for file in nexus*; do echo "$file"$"$(cat -- "$file")" > "$file"; done
助けてくれてありがとう!
答え1
sed解決策:
for f in nexus*; do sed -i "s/^>/$f&/" "$f"; done
または使用愚かなおよびinplace
拡張機能(v.4.1.0から利用可能):
for f in nexus*; do awk -i inplace '/^>/{ $0=FILENAME$0 }1' "$f"; done
答え2
find . ! -name . -prune -type f -name nexus\* -exec perl -i'' -pe 's/^>/$ARGV>/' {} +
現在のディレクトリに対してのみ起動し、名前で始まる一般的なファイルを見つけ、行の先頭で見つかったfind
コンテンツをファイル名+自体に置き換えて、nexus
これらの複数のファイルに対して内部編集を実行します。>
答え3
これは、Perl 1行コードを使用して簡単に行うことができます。
perl -i -pe 's/>/$ARGV$_/g' nexus*
ファイルは内部で変更されるため、-i
コマンドをテストする前に-i
フラグなしで実行します。