Problema
Tantas coisas erradas aqui
#!/bin/bash
myarr = (
tem um espaço entre ele, significando que nada é atribuído se ele for executado.
cat 25.6.2015_test.txt | awk
Awk pode abrir seus próprios arquivos sem necessidade de gato
-F 'fafafafa' '$1~/^[a-z0-9*]+$/
-F é o separador de campo não registrado, então tudo isso é remover o texto fafafafa
, ele ainda está lendo cada linha como um registro, então sua próxima condição é totalmente inútil.
myarr = ($( cat 25.6.2015_test.txt | awk -F 'fafafafa' '$1~/^[a-z0-9*]+$/ {print $1}') )
Isso imprimirá várias linhas, que serão elementos separados na matriz, já que estão divididas em novas linhas e não têm visibilidade do que é um registro no awk (se você tivesse realmente dividido em registros em vez de campos).
echo ${myarr[1]}
echo $i
Cite isso, a menos que você queira ver todos os arquivos em seu diretório sempre que fizer eco (devido ao *
nos registros)
:
Por quê?
Solução
# Create an array
myarr=()
# Save the number of different blocks to be saved, notice the
# '-vRS' which sets the field separator
blocks=$(awk -vRS='fafafafa' '$1~/^[a-z0-9*]+$/{x++}END{print x}' file)
# While the the counter is less than the number of blocks.
while [[ $x -le $blocks ]] ;do
# Increase the counter
((x++))
# Add the value for that block to the array, notice the quotes around
# '$()', they are important in keeping all the block as one array
# element. The awk also increments its own counter for each
# occurrence of 'fafafafa' and your condition for '$1'. When both
# counters match the block is saved to the array.
myarr+=("$(awk -vRS='fafafafa' -vN="$x" '$1~/^[a-z0-9*]+$/{x++}
x==N{print RS$0}' test)")
done