DNA配列に対するbashシェルコマンド

DNA配列に対するbashシェルコマンド

以下の例に示すように、DNA配列を含むファイルがあります。それぞれのA、T、G、Cの数をどのように見つけることができますか?(はい、行ではなく列)bashシェルコマンドを使用します。

ファイルには846975行があり、次のようになります。

AAGAAAGAAGAGGAACTTCTCTCCATCCAGCCTCATTCCACTGCACCAACTCTTCTGTGT
CGGGTTGTGCAGGAGAGAAAGGGAGCTTGGCAACTCTTTGCTGTGCTGAGTTGTGGTAGC
CCATCACTGGGTTGTAAAGTGCCTTGCCTCCTTTCCTCCCCTCCTTTTTTTTTGAGACAG
AGTCTCACTCTGTCGTCCAGGCTGAGGTGCAGTGGTGCGATCTCTGCTCACTGCAACCTC
AGCCTCCTGGGTTCAAGTGATTCTCCTGCCTCAGCCTCCCAGGAAGCTGGGACTACAGGC
ACATGCCACCACACCTGGCTAACTTTTTTTTATTTTTAGTAGAGAAAGGGTATCACCATG
TTGGCCAGGCTGGTCTTGAACTCCTGACTTCAGGTGATCCACCCACCTTGGCCCCCCAAA
GTGCTGGGGTTAAAGGCATGAGACACTGCGCCCGTCCACCTCCTCTTTTACTTGGGAGAA
ATGCACAGATTCTGGGTGCCATGTGCATTTGTTTTGGGAGTGATAATTGATCTAACTTAT
GGAAATAATACTAGATAGTTAGCGGATGGATTCTGTATCTGATGAGAGTTTTGGGCAAAA
CGAATTCCTAGTTTCTGAGTCTTATTTTTCCCCTGATTCAAGAAAACTGTGAATTATCCA
GCCAGTAAAAAACTCTCACAGCTCTGGATGTGAGTTTAGGACACTGGATTTCTACCACTC
ATTTTCTTACTACTTTTCCTGTGCAAGGATCATGGCACAAGTTGCAGTTTCCACCCTGCC
CATTGAAGATGAGGAGTCTGTTGAAGATGAGGAGTCCTTGGAGAGCAGGATGGTGGTGAC
ATTCCTGTCAGCTCTCGCCTCCATGGTCAGACCTTCTGTTCTCACATTCTGTAGTTCGGT
AGGACTGGGCGGTAGATAAGGTTGATTTGTTTTCGTAGAACTTACAATTTTGTGATTTTT
AGTTCTAATGAGTAGACCTTTTTCGTGAATAGTAGTTACGATCAAACACCTCTGACCAAA

この例では、最初の列の出力はでなければなりませんA=9,T=1,G=3,C=4

ベストアンサー1

通常、awknull/null フィールド区切り文字 (特定gawk) をサポートしている場合は、次のことができます (1 行あたりの数が必要な場合)。

gawk -F '' '{for (x=1;x<=NF;x++) arr[NR$x]++;
    for (i in arr) printf("%s:%d\t", i, arr[i]);delete arr;print ""}' infile

いいえ、列あたりの数が本当に必要な場合(フィールド区切り記号が空であると仮定)まず、入力データを列から行に変換してから、上記と同じ操作を実行する必要があります。

gawk -F '' '{for (x=1;x<=NF;x++) arr[NR$x]++;
    for (i in arr) printf("%s:%d\t", i, arr[i]);delete arr;print ""}' \
<(gawk -F '' '{for (i=1;i<=NF;i++) ctr[i]=ctr[i]$i} 
    END{for (i in ctr) print ctr[i]}' infile)

以下のスクリプトを使用してawk列を行に置き換えます。

gawk -F '' '{for (i=1;i<=NF;i++) ctr[i]=ctr[i]$i} 
    END{for (i in ctr) print ctr[i]}' infile

上記のコマンドの代わりに、次のコマンドを使用して移動できます。

sed 's/./& /g' in|datamash -t ' ' transpose |sed 's/ //g'

おすすめ記事