상관 행렬의 각 행을 별도의 파일로 분할

상관 행렬의 각 행을 별도의 파일로 분할

나는 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]#

관련 정보