行で区切られたテキストを含むファイルがあります。
GCAACACGGTGGGAGCACGTCAACAAGGAGTAATTCTTCAAGACCGTTCCAAAAACAGCATGCAAGAGCG
GTCGAGCCTAGTCCATCAGCAAATGCCGTTTCCAGCAATGCAAAGAGAACGGGAAGGTATCAGTTCACCG
GTGACTGCCATTACTGTGGACAAAAAGGGCACATGAAGAGAGACTGTGACAAGCTAAAGGCAGATGTAGC
ここから10から80までの文字を抽出したいです。
TGGGAGCACGTCAACAAGGAGTAATTCTTCAAGACCGTTCCAAAAACAGCATGCAAGAGCG
GTCGAGCCT
ファイルの文字数を計算する方法を見つけました。
wc -m file
1行に文字数を取得する方法は次のとおりです。
awk '{print substr($0,2,6)}' file
しかし、10から80までの文字を取得する方法が見つかりません。
改行文字は文字とは見なされません。
どんなアイデアがありますか?
はい、これは完全なゲノムのDNAです。私は以下を使用して、異なる足場(この場合は10と11)を含むfastaファイルからこのDNAを抽出しました。
awk '/scaffold_10\>/{p=1;next} /scaffold_11/{p=0;exit} p'
最終的には、指定された足場から100〜800文字(または同様の文字)を取得する簡単なコマンドが必要です。
編集:質問はここに続きます。bashスクリプトの代わりにgff2fastaを使用して全ゲノムから部分DNA配列を取得する
ベストアンサー1
$ cat file1
GCAACACGGTGGGAGCACGTCAACAAGGAGTAATTCTTCAAGACCGTTCCAAAAACAGCATGCAAGAGCG
GTCGAGCCTAGTCCATCAGCAAATGCCGTTTCCAGCAATGCAAAGAGAACGGGAAGGTATCAGTTCACCG
GTGACTGCCATTACTGTGGACAAAAAGGGCACATGAAGAGAGACTGTGACAAGCTAAAGGCAGATGTAGC
各行の長さを確認してください。
$ awk '{print length,$0}' file1
70 GCAACACGGTGGGAGCACGTCAACAAGGAGTAATTCTTCAAGACCGTTCCAAAAACAGCATGCAAGAGCG
70 GTCGAGCCTAGTCCATCAGCAAATGCCGTTTCCAGCAATGCAAAGAGAACGGGAAGGTATCAGTTCACCG
70 GTGACTGCCATTACTGTGGACAAAAAGGGCACATGAAGAGAGACTGTGACAAGCTAAAGGCAGATGTAGC
10〜80文字を印刷してください。
$ awk '{print substr($0,10,70)}' RS= file1
TGGGAGCACGTCAACAAGGAGTAATTCTTCAAGACCGTTCCAAAAACAGCATGCAAGAGCG
GTCGAGCC
入力に空白行が含まれていないと仮定します(RS=
有効短絡モードここで、各レコードは段落です(段落は一連の空行で区切られています)。これは、ファイル全体がメモリにロードされることを意味します。