私は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]#