相関行列の各行を別々のファイルに分割する

相関行列の各行を別々のファイルに分割する

私は22000個の遺伝子を含む相関行列を持っており、いくつかの分析を実行するには、行列の各行を新しいファイルに分割する必要があります。これは、22,000個の別々のファイルを生成する必要があることを意味します。

入力ファイルの例に対して(gene_name.txtという名前の出力ファイルをインポートしたいので)、分割コマンドを使用したくありません。

                IGHD2-15    IGHD3-22    IGHD3-16    IGHD3-10    
       IGHD2-15 1   0.696084    0.799736    0.818788    
       IGHD3-22 0.696084    1   0.691419    0.67505 
       IGHD3-16 0.799736    0.691419    1   0.810656    
       IGHD3-10 0.818788    0.67505 0.810656    1   

答え1

遺伝子名が最初の列にあると仮定すると、必要なものは次のとおりです。

awk '{print >> $1".txt"; close(n".txt")}' matrix.txt

これにより、行の最初のフィールドに拡張子(完全にオプション)が付いたファイルに各行が印刷されます.txt。ファイルに遺伝子名を含めない場合は、次のようにします。

awk '{n=$1; $1="";print >> n".txt"; close(n".txt")}' matrix.txt

最初の行がヘッダーの場合は、次を使用してください。

awk 'NR>1{print >> $1".txt"; close($1".txt")}' matrix.txt

最後に、最初のフィールドが単純な遺伝子名ではなく、NULLまたは有効なパスを含む可能性があるため、ファイルに行を含めることができるため、入力を削除する必要がある場合は、次のようにします。

awk 'NR > 1 && ($1 ~ /^[A-Z0-9-]+$/) { print >> $1; close($1) }'

答え2

各ファイルに含める内容の例を提供していないか、ファイル名を何で指定するかを推測しているからです。

これは現在のディレクトリから「DATA」ファイルをインポートし、各行の最初の列名にちなんで同じディレクトリに新しいファイルを作成し、そのファイルを残りの列のデータで埋めます。

重要性

IGHD2-15 1   0.696084    0.799736    0.818788

というファイルを作ってIGHD2-15入れてください。

1   0.696084    0.799736    0.818788

スクリプト:

#!/bin/bash

while read -r line; do
        newFileName="$(echo "$line" | awk '{print $1}')"
        newFileData="$(echo "$line" | awk '{$1 = ""; print $0}')"
        echo $newFileData > $newFileName
done < DATA

答え3

以下の方法を試してみましたが、確認してみるとうまくいきます。

ここで、各行は新しいファイルにコピーされます。ファイル名は各行の最初の列になります。

cat data_file.txt
IGHD2-15 1   0.696084    0.799736    0.818788
IGHD3-22 0.696084    1   0.691419    0.67505
IGHD3-16 0.799736    0.691419    1   0.810656
IGHD3-10 0.818788    0.67505 0.810656    1


root@praveen_linux_example dev]# j=`cat data_file.txt| wc -l`
[root@praveen_linux_example dev]# for ((z=1;z<=$j;z++));  do filename=`awk -v line="$z" 'NR==line{print $1}' data_file.txt`; sed -n ''$z'p' data_file.txt >$filename.txt;done
[root@praveen_linux_example dev]#

関連情報