awk diretório dos arquivos

1

Dado um diretório cheio de arquivos .sam, para cada arquivo:

  1. se column3 = blah e 451000 = < column4 < = 468999, linha de gravação para file_ribos.sam

  2. caso contrário, escreva a linha para file_non_ribos.sam

Exemplo de entrada

# file_1.sam    
abc  123  blah  451200
abc  123  blah  450999

Exemplo de saída

# file_1_ribos.sam
abc  123  blah  451200

# file_1_non_ribos.sam
abc  123  blah  450999

Meu código parece estar falhando. O que estou fazendo errado?

for file in *.sam ; do
  awk -F"\t" '
   {if($3 == "blah" && $4 >= "451000" && $4 <= "468999") {
     {print $0} > "$(basename "$file" .sam)_ribos.sam";}
    else {print $0} > "$(basename "$file" .sam)_non_ribos.sam";}
  ' $file;
done
    
por fire_water 12.03.2015 / 18:01

1 resposta

4

Eu refatorei seu código um pouco ...

for file in *.sam ; do
  awk -v basename="$(basename $file .sam)" '
    { non = ($3 == "blah" && $4 >= 451000 && $4 <= 468999) ? "" : "_non"
      outfile = basename non "_ribos.sam"
      print > outfile
    }
  ' "$file"
done
    
por 12.03.2015 / 18:16

Tags