2つの列を持つファイルを読み取り、それを使用してファイル名を変更します。

2つの列を持つファイルを読み取り、それを使用してファイル名を変更します。

2つの列を持つテキストファイルがあります。 1つの列は現在のファイル名を表し、もう1つの列はファイルの最後の名前として必要な名前を表します。テキストファイルは次のとおりです。

JALAZR010000001.1  -  CM040670.1
JALBAP010000001.1  -  CM040694.1
JALBBH010000001.1  -  CM040712.1
JALBAZ010000001.1  -  CM040704.1
JALBBR010000001.1  -  CM040722.1
JALBBU010000001.1  -  CM040725.1
JALAZL010000001.1  -  CM040664.1
JALBAE010000001.1  -  CM040680.1

ファイルは次の場所にあります。

Genomic_data/Mito/CDS/Fungi/JALAZR010000001.1.gb

私は同様のことを試しました:

awk -F" - " '{print $1, $2}' filename.txt | mv Genomic_data/Mito/CDS/Fungi/{$1}.gb  Genomic_data/Mito/CDS/Fungi/{$2}.gb

しかし、私は経験豊富なbashプログラマではないので、2つのawk出力をmvプログラムにパイプする方法についてのアドバイスをいただきありがとうございます(一度はできませんでした)。予想される出力は次のようになります。

Genomic_data/Mito/CDS/Fungi/CM040670.1.gb

時間をいただきありがとうございます。

PS - 他の代替例も良いでしょう。

ベストアンサー1

提案したフレーズに近いものを使用できますGNUパラレルawkの代わりに、例えば

$ parallel --colsep ' - ' echo mv -n -- Genomic_data/Mito/CDS/Fungi/{1}.gb Genomic_data/Mito/CDS/Fungi/{2}.gb :::: filename.txt
mv -n -- Genomic_data/Mito/CDS/Fungi/JALAZR010000001.1.gb Genomic_data/Mito/CDS/Fungi/CM040670.1.gb
mv -n -- Genomic_data/Mito/CDS/Fungi/JALBAP010000001.1.gb Genomic_data/Mito/CDS/Fungi/CM040694.1.gb
mv -n -- Genomic_data/Mito/CDS/Fungi/JALBBH010000001.1.gb Genomic_data/Mito/CDS/Fungi/CM040712.1.gb
mv -n -- Genomic_data/Mito/CDS/Fungi/JALBAZ010000001.1.gb Genomic_data/Mito/CDS/Fungi/CM040704.1.gb
mv -n -- Genomic_data/Mito/CDS/Fungi/JALBBR010000001.1.gb Genomic_data/Mito/CDS/Fungi/CM040722.1.gb
mv -n -- Genomic_data/Mito/CDS/Fungi/JALBBU010000001.1.gb Genomic_data/Mito/CDS/Fungi/CM040725.1.gb
mv -n -- Genomic_data/Mito/CDS/Fungi/JALAZL010000001.1.gb Genomic_data/Mito/CDS/Fungi/CM040664.1.gb
mv -n -- Genomic_data/Mito/CDS/Fungi/JALBAE010000001.1.gb Genomic_data/Mito/CDS/Fungi/CM040680.1.gb

echo正しいことをしていると確信している場合は、削除してください。

おすすめ記事