Como sobre o seguinte script awk
:
#!/usr/bin/awk -f
BEGIN {
FS="\t"
print "#key\tstring\tpos(string)\tApos(string)"
}
{
out=""
printf "%s\t",$0
split($2,str,"")
gsub(/ /,"",$3)
split($3,pos,",")
for (i in pos){
if (str[pos[i]]=="A"){
out = out pos[i] ", "
}
}
gsub(/, $/,"",out)
print out
}
Salve-o como (por exemplo) findA.awk
e torne-o executável com chmod +x findA.awk
.
Em seguida, execute-o em seus dados de entrada e redirecione a saída para um novo arquivo:
./findA.awk input.txt > output.txt
cat output.txt
#key string pos(string) Apos(string)
key1 AA000AA000000AAA0A 2, 3, 18, 12 2, 18
key2 00A00AAA000AAAA00A 3, 18 3, 18
A saída não é tão organizada quanto o seu exemplo, pois é delimitada por tabulação (conforme sua solicitação) e a largura da tabulação não se alinha com a largura das várias strings.