awkを使用して次の行をカンマで区切って最初の行の終わりにインポートするにはどうすればよいですか?

awkを使用して次の行をカンマで区切って最初の行の終わりにインポートするにはどうすればよいですか?

公に利用可能なデータベースから.faいくつかのフォーマットのシーケンスをダウンロードしました。.csvシーケンス名と長さをカンマで区切って含むファイルを作成したいと思います。入力ファイルは次のとおりです。

>cel-let-7-5p MIMAT0000001 Caenorhabditis elegans let-7-5p
UGAGGUAGUAGGUUGUAUAGUU
>cel-let-7-3p MIMAT0015091 Caenorhabditis elegans let-7-3p
CUAUGCAAUUUUCUACCUUACC
>cel-lin-4-5p MIMAT0000002 Caenorhabditis elegans lin-4-5p
UCCCUGAGACCUCAAGUGUGA
>cel-lin-4-3p MIMAT0015092 Caenorhabditis elegans lin-4-3p
ACACCUGGGCUCUCCGGGUACC
>cel-miR-1-5p MIMAT0020301 Caenorhabditis elegans miR-1-5p
CAUACUUCCUUACAUGCCCAUA

ヘッダー行の最初の項目を選択して次の行の読み取りサイズを印刷するには、次のコマンドを使用します。

grep -A 1 "^>" file_name.fa | awk '{print($1); getline; print length($0)}'

これが私が得たものです。出力:

>cel-let-7-5p
22
>cel-let-7-3p
22
>cel-lin-4-5p
21
>cel-lin-4-3p
22
>cel-miR-1-5p
22

.csvしかし、必要な出力ではExcel / R / pythonにエクスポートできるファイルを作成したいと思います。予想出力:

cel-let-7-5p,22
cel-let-7-3p,22
cel-lin-4-5p,21
cel-lin-4-3p,22
cel-miR-1-5p,22

私ができる方法はありますか?オンラインでヘルプが見つかりません。

ベストアンサー1

そして使用を避けるgetline()必ずしも必要ではない場合):

$ awk '
    /^>/{sub(/^>/, "");printf "%s,", $1;next}    # process lines starting with '>'
    {print length()}                             # other lines
' file_name.fa 

出力

cel-let-7-5p,22
cel-let-7-3p,22
cel-lin-4-5p,21
cel-lin-4-3p,22
cel-miR-1-5p,22

おすすめ記事