将相关矩阵的每一行拆分为单独的文件

将相关矩阵的每一行拆分为单独的文件

我有一个包含 22000 个基因的相关矩阵,为了进行一些分析,我需要将矩阵的每一行拆分为一个新文件。这意味着我需要创建 22000 个单独的文件。

我不想使用 split 命令(因为我想获取输出文件作为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]#

相关内容