공백으로 구분되지 않은 열을 새 파일로 선택하고 복사하는 방법?


1

열을 선택하고 새 파일에 복사하는 방법에 대한 (jcbermu) 스크립트를 보았습니다. 모든 열이 공백으로 구분 된 경우 (모든 공백이 잘 작동 함) 완벽하게 작동합니다. 이 특수 형식의 파일에서 작업하도록 둘러보기 스크립트를 개선하고 싶습니다.

  • 첫 번째 행은 각 열 (animalid snp1 snp2 등)에 대한 헤더를 가지며 공백으로 구분됩니다.
  • 두 번째 행 : 첫 번째 열에는 동물의 공간, 그 다음 모든 SNP 유전자형 (SNP 당 하나의 세포)이 있고 모두 블록으로 구성됩니다 (유전자형은 공간으로 구분되지 않습니다).

그래서 스크립트에서 행 1과 열 1 이후에 구분되지 않은 열 데이터가 있음을 알리는 방법 (각 셀은 하나의 필드 임).

내 파일의 예 :

animalid snp1 snp2 snp3 snp4 snp5 snp6 snp7 ....... snp8000
fish1 2020121 ....... 2
fish2 0202102 ....... 1
fish3 1201201 ....... 2
.
.
Fish1500 2010211 ...... 1

두 번째 줄과 그 이후에는 두 개의 공백으로 구분 된 단어 만 있습니다.
glenn jackman

글렌 (Glenn) : 네, 1 행 다음 1 열 뒤에는 각 필드에 단 하나의 문자 만 있고 구분되지 않습니다.
Roger Vallejo

답변:


0

awk :

awk 'NR >= 2 {gsub(/./, "& ", $2)} 1' <<DATA
foo bar baz
abc 1234
def 5678
DATA

산출물

foo bar baz
abc 1 2 3 4
def 5 6 7 8

0

내가 올바르게 이해한다면 입력 파일은 다음과 같다.

cat fish-genotypes
animalid snp1 snp2 snp3 snp4 snp5 snp6 snp7 snp8000
fish1 20201212
fish2 02021021
fish3 12012012
Fish1500 20102111

출력은 다음과 같습니다.

animalid snp1 snp2 snp3 snp4 snp5 snp6 snp7 snp8000
fish1    2    0    2    0    1    2    1    2       
fish2    0    2    0    2    1    0    2    1       
fish3    1    2    0    1    2    0    1    2       
Fish1500 2    0    1    0    2    1    1    1

cli 도구가있는 bash 스크립트

#!/bin/bash
vert=$(cut -d' ' -f1 fish-genotypes |wc -L)
while read -a line; do
    printf "%-$((vert+1))s" ${line[0]}
    [[ "${line[1]}" =~ [[:alpha:]] ]] && {
        unset line[0]
        header=(${line[@]})
        echo ${header[@]}
        continue
    }
    for ((i=0;i<${#header[@]};i++)) {
        printf "%-$((${#header[i]}+1))s" ${line[1]:i:1}
    }
    echo
done <fish-genotypes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.