입력 파일에는 어떤 유형의 데이터가 포함되어 있습니까?

입력 파일에는 어떤 유형의 데이터가 포함되어 있습니까?

10000개 이상의 텍스트 파일이 포함된 폴더가 있습니다. 파일은 두 가지 유형이 될 수 있습니다.

Type1: "DNA"라고 함

체재:

">"로 시작하는 헤더 정보

2행 이후에는 "A", "T", "G", "C", "N" 문자만 포함됩니다.

예:

파일 이름: "ABC123.tab"

  >DNA1_example
  TGTTGTTGTTGTTGCTGCTGTTGTTGCTGCTGTTGTTGTTGTTGTTGCTGCTGTTGTTGTTGTTGTTGCTGCTGCTGTTGTTGCTGTTGTCTTTGAGGTTGGAGATTAGGACGATTCGGCATGTTGTTGTTCCATGATCCGATCCCAACACCAGGACTAGGCTGTCCTTGCAAACTGATACCGGGACTCGATCTGGCACCAACTCCTGGCTGCGGAGAAAGTTGGGATCCGTGTTGTTGTTGTTGAAAACCTTGTGGAGGTGGTCCTATGCGAGGCGACACTTGAGCCGAATTAAACGGTGATAGCCGAGAAGATGGACCTCCAGGAGCAAAATTATTGCCGTTGTTGTTATTGACAATTTGTGCCTGAGGGCTTTGATTGTAGTTGCCACTATTGGCCGTGCTCAAACTGCTCATCGGACCGTGAGGTGAAAAAGGTGGTTGCATTGGGCGCTGACTGGGGGAGATTTGAGACGCTAGTGGCCCGCTACCTATTGGACTGC

유형 2: "단백질"이라고 함

체재:

">"로 시작하는 헤더 정보

2행 이후에는 G, A, L, M, F, W, K, Q, E, S, P, V, I, C, Y, H, R, N, D, T 문자만 포함됩니다.

예:

파일 이름: "DEF123.tab"

    >Protein1_example
    MRCVLCYKNIAGNKLARFCVFSTSILLSLLSTQAQLSIIPQDELLAAEKMVNSSRWRLLD

내가 하고 싶은 일은:

1) 파일을 엽니다.

2) ">"로 시작하는 줄 건너뛰기

3) 다른 줄에 L, M, F, W, K, Q, E, S, P, V, I, Y, H, R, D 문자가 나타나는지 확인합니다.

4) 그렇다면 "단백질"을 인쇄하고, 그렇지 않으면 "DNA"를 인쇄하십시오.

답변1

사용 awk:

for name in folder/*; do
    # skip this name if it's not the name of a file
    [ ! -f "$name" ] && continue

    awk 'NR == 1 && !/^>/ {
             printf("Not a fasta file: %s\n", FILENAME)
             skip=1; exit
         }
         !/^>/ && /[LMFWKQESPVIYHRD]/ {
             printf("Protein fasta file: %s\n", FILENAME)
             skip=1; exit
         }
         END {
             if (!skip) printf("Probably a DNA fasta file: %s\n", FILENAME)
         }' "$name"
done

그러면 이름이 지정된 디렉터리의 모든 이름이 반복됩니다 folder. 파일이 아닌 하위 디렉터리의 이름을 건너뛰고 awk찾은 파일에 스크립트를 적용합니다.

그럼 그것

  1. >첫 번째 줄의 시작 부분에 있는 a를 테스트하여 파일이 fasta 파일인지 확인하세요. >첫 번째 줄 시작 부분에 아무 것도 없으면 파일 오류를 보고하고 종료합니다 .

  2. 로 시작하지 않는 각 줄에 대해 >해당 줄에 단백질 기호가 있는지 테스트합니다. 존재하는 경우 해당 파일을 Protein Fasta 파일로 보고하고 종료됩니다.

  3. 마지막으로, 거기에 도착하면,가능한이는 DNA fasta 문서 및 코드에 보고되어 있습니다. 그럴 가능성은 거의 없지만 DNA 아미노산 기호도 단백질 기호 세트의 일부이기 때문에 여전히 단백질 fasta 파일일 수 있습니다.

이 변수는 파일이 fasta 파일이 아니거나 단백질 fasta 파일이라고 판단하여 종료할 때 skip1로 설정됩니다 . END블록에서 이 변수를 테스트함으로써 우리는 일찍 도착했기 때문에 거기에 도달했는지 exit, 아니면 데이터가 부족해서 거기에 도달했는지를 알 수 있습니다(이 경우 DNA fasta 파일일 수 있음).

답변2

미래에 관심이 있는 사람이 있다면 Perl을 사용하는 빠르고 간단한 방법은 다음과 같습니다.

  #!usr/bin/perl
  use warnings;
  use strict;
  open(FILE, "ABC123.fa");
  my $line_=<FILE>;
   $line_=readline(*FILE) if $line_=~/>/;
  close(FILE);
  if($line_ =~ /L|M|F|W|K|Q|E|S|P|V|I|Y|H|R|D/){
  print "Protein\n"
  }
  else {
   print "Nucleotide\n"
   }

다음을 사용하여 실행합니다.

  perl format_tester.pl

이 코드를 실행할 때마다 sed 메서드를 사용하여 "ABC123.fa"를 "DEF123.fa"로 바꿉니다.

    sed -i 's/ABC123.fa/DEF123.fa/g' format_tester.pl

관련 정보