質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Q&A

解決済

2回答

352閲覧

UNUXでファイル名を短く変更したい。

kurukuru8395

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

0グッド

0クリップ

投稿2023/09/11 07:49

編集2023/09/11 07:53

実現したいこと

ファイル名が長くて、処理が面倒くさいので、名前を短くしたいのですが、うまくできません。

前提

1_CCC.FCC7E_L512.r1.fastq
2_CCC.FCC7D_L513.r1.fastq

このようなファイルが200個くらいたくさんあり、
1_CCC.FCC7E_L512.r1.fastq
一括でFCC7E_L512を削除した名前を変更(CCC以下からr1前までを削除)して、new_namesというファイルに移行させたいです。
→1_CCC.r1.fastq

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

bash

1mkdir new_names 2for fq in *fastq; 3do 4 new_id=$(echo $fq | sed 's/_S[A-Z]; s/.r1.fastq//)←ここをどう処理すればよいか分かりません。 5 cp $fq new_names/$new_id 6done

試したこと

上記のように試しましたが、4行目をどのように処理すればいいか分かりません。
ご教授いただけませんでしょうか?

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2023/09/11 08:14 編集

すでに変更後のファイル名が存在する場合は上書きしていいのでしょうか? それとも絶対にそのケースはないという想定でいいのでしょうか? それと、2_CCC.FCC7D_L513.r1.fastqには「FCC7E_L512」の記述がないので 変換対象外という認識でよろしいですか?
guest

回答2

0

質問にあるsedを使うバージョンです。
どの部分が固定なのかわからないので、これでいいかどうか不明ですが。

bash

1echo $fq | sed 's/\([0-9]_[A-Z]*\)\..*\(\.r[0-9].fastq\)/\1\2/'

sedでは(他でもそうですが)、対象正規表現を()でくくると、くくったところを左から順に\1,\2という形で参照できます。 これを後方参照と言います。詳しくは検索してみてください。

投稿2023/09/11 08:38

TakaiY

総合スコア12738

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurukuru8395

2023/09/11 08:58

非常に勉強になりました。UdemyでLINUX購入したのですが、この辺り全然なくて、困っていました。本当にありがとうございます!
guest

0

ベストアンサー

ファイル名から察するにリード名(single-end か paired-end か判りませんが)かと思いますので、cut コマンドでもよいかと思います。

bash

1for fq in *fastq; 2do 3 new_id=$(echo $fq | cut -d. -f1,3-) 4 cp $fq new_names/$new_id 5done

GNU coreutils の cut コマンドであれば --complement オプションを利用する方法もあります。

bash

1for fq in *fastq; 2do 3 new_id=$(echo $fq | cut --complement -d. -f2) 4 cp $fq new_names/$new_id 5done

投稿2023/09/11 08:13

編集2023/09/11 08:18
melian

総合スコア19695

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurukuru8395

2023/09/11 08:21

本当にありがとうございます。とても助かりました。どうやらペアエンドとかいうやつみたいなんですが、関係なくうまく出来ました! melianさんのように上手くスクリプト書きたいのですが、どうやって勉強されているのでしょうか? 本など買っても、基本的なことしか書いてなくて困っています。 とても助かりました。
melian

2023/09/11 08:33

以前、バイオインフォマティクス関連の作業をしていまして、今回と同じ様なファイル名の変更を行ったことがあったのです。勉強方法、というよりは StackOverFlow や StackExchange で同様の事例を探すなどしています。 https://stackoverflow.com/questions/tagged/bioinformatics https://bioinformatics.stackexchange.com 現在なら ChatGPT や Google Bard などを利用してもよいかもしれません。
kurukuru8395

2023/09/11 08:57

そうだったのですね。でもこんなに早く検索できず、とても助かりました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問