각 문자열 사이의 불규칙한 항목 수를 기반으로 특정 문자열을 기반으로 하나의 열을 여러 열로 분할합니다.

각 문자열 사이의 불규칙한 항목 수를 기반으로 특정 문자열을 기반으로 하나의 열을 여러 열로 분할합니다.

고유한 열이 포함된 파일이 있고 이 열을 특정 문자열(chr)을 기반으로 여러 열로 분할하고 싶습니다. 첫 번째 문자열과 두 번째 문자열, 두 번째 문자열과 세 번째 문자열, n 번째 문자열과 m 번째 문자열 사이의 항목 수가 불규칙합니다.

입력은 다음과 같습니다.

chr10:127293562-127293909
BRUNOL4(Hs/Mm)
CPEB4(Hs/Mm)
CUG-BP(Hs/Mm)
DAZAP1(Hs/Mm)
ENOX1(Hs/Mm)
FMR1(Hs/Mm)
chr11:49214073-49214804
BRUNOL4(Hs/Mm)
BRUNOL5(Hs/Mm)
CPEB2(Hs/Mm)
CPEB4(Hs/Mm)
CUG-BP(Hs/Mm)
HNRNPC(Hs/Mm)
HNRNPCL1(Hs/Mm)
HNRNPH1(Hs/Mm)
HuR(Hs/Mm)
MBNL1(Hs/Mm)
NOVA1(Hs/Mm)
chr11:49854587-49855127
A1CF(Hs/Mm)
BRUNOL4(Hs/Mm)

출력은 다음과 같아야 합니다.

chr10:127293562-127293909  chr11:49214073-49214804  chr11:498547-498551
BRUNOL4(Hs/Mm)             BRUNOL4(Hs/Mm)           A1CF(Hs/Mm)
CPEB4(Hs/Mm)               BRUNOL5(Hs/Mm)           BRUNOL4(Hs/Mm)
CUG-BP(Hs/Mm)              CPEB2(Hs/Mm)
DAZAP1(Hs/Mm)              CPEB4(Hs/Mm)    
ENOX1(Hs/Mm)               CUG-BP(Hs/Mm)
FMR1(Hs/Mm)                HNRNPC(Hs/Mm)
                           HNRNPCL1(Hs/Mm)
                           HNRNPH1(Hs/Mm)
                           HuR(Hs/Mm)
                           MBNL1(Hs/Mm)
                           NOVA1(Hs/Mm)

답변1

$ csplit -zsf file -n 1 ip.txt /^chr/ {*} ; paste file* | column -nt
chr10:127293562-127293909  chr11:49214073-49214804  chr11:49854587-49855127
BRUNOL4(Hs/Mm)             BRUNOL4(Hs/Mm)           A1CF(Hs/Mm)
CPEB4(Hs/Mm)               BRUNOL5(Hs/Mm)           BRUNOL4(Hs/Mm)
CUG-BP(Hs/Mm)              CPEB2(Hs/Mm)             
DAZAP1(Hs/Mm)              CPEB4(Hs/Mm)             
ENOX1(Hs/Mm)               CUG-BP(Hs/Mm)            
FMR1(Hs/Mm)                HNRNPC(Hs/Mm)            
                           HNRNPCL1(Hs/Mm)          
                           HNRNPH1(Hs/Mm)           
                           HuR(Hs/Mm)               
                           MBNL1(Hs/Mm)             
                           NOVA1(Hs/Mm)             
  • csplit패턴에 따라 파일을 분할하는 데 사용됩니다.
    • -z빈 파일을 제거하는 옵션(패턴이 첫 번째 줄 자체와 일치하는 경우)
    • -s로그 출력 억제
    • -f file -n 1출력 파일 이름은 file한 자리 접미사 로 시작됩니다.
    • ip.txt입력 파일이며 /^chr/처리할 패턴입니다.
    • {*}최대한 나눠서
  • paste그런 다음 열 연결로 파일을 분할하는 데 사용되었습니다.
  • column -nt붙여넣기 출력의 스타일을 지정하는 데 사용되며 인접한 구분 기호 병합과 GNU 확장의 -n기본 동작을 방지합니다.column

답변2

그리고파이프가 없는 경우:

#!/usr/bin/env perl

use strict; use warnings;

my $c = -1; my $arr = [];

while (<>) {
    if (/^chr/) {$c++};
    chomp;
    push(@{ $arr->[$c] }, $_);
}

foreach my $i (0...scalar(@{ $arr->[1] }) -1) {
    printf("%-30s %s\n", $arr->[0]->[$i], $arr->[1]->[$i]);
}

산출

chr10:127293562-127293909      chr11:49214073-49214804
BRUNOL4(Hs/Mm)                 BRUNOL4(Hs/Mm)
CPEB4(Hs/Mm)                   BRUNOL5(Hs/Mm)
CUG-BP(Hs/Mm)                  CPEB2(Hs/Mm)
DAZAP1(Hs/Mm)                  CPEB4(Hs/Mm)
ENOX1(Hs/Mm)                   CUG-BP(Hs/Mm)
FMR1(Hs/Mm)                    HNRNPC(Hs/Mm)

관련 정보