Em matrizes associativas awk
são percorridas em uma ordem não determinada. Substitua seu
for (i in a)
por
n = i
for(i=1;i<=n;i++)
Para incluir seu awk em um script bash, você pode usar algo como
#!/bin/bash
for file
do awk -v file="$file" '....' "$file"
done
Certifique-se de executar chmod a+rx
no arquivo de script.
Substitua também a linha
fn="file" c;
no seu script awk por
fn = c "_" file;
Esta linha é como o seu novo nome de arquivo é construído: a variável awk file
é inicialmente dada como valor o nome do
arquivo sendo processado (a sintaxe é: awk -v variable = value). A variável awk fn
é sua
novo nome de arquivo, e é a variável c
que contém o número, concatenado com o caractere _
e
variável de nome de arquivo.
Você pode executar este comando bash com vários arquivos como argumentos. Eles são processados pelo awk um por um.
Resultado final:
#!/bin/bash
for file
do awk -v file="$file" 'function print_vals() {
fn = c "_" file;
print hdr > fn;
print "REGION chr", sn, en >> fn;
n = i
for(i=1;i<=n;i++)
print a[i] >> fn;
} NR == 1 {
hdr=$0;
c=0;
next
} NF==2 && $1 >= 1000000*c {
if (c)
print_vals();
delete a;
i=0;
c++;
sn=$1;
} NF==2 {
a[++i]=$0;
en=$1;
} END {
print print_vals();
}' "$file"
done