Aqui está uma abordagem de nível ligeiramente superior. Isso usa scripts de shell em vez de awk
scripting. As soluções awk
são muito elegantes. Eu forneço isso como um exemplo alternativo.
Suposições: há o mesmo número de formantes e os formantes estão na mesma ordem em cada arquivo. O primeiro formante no arquivo1 substitui o primeiro formante no arquivo2, o segundo formato substitui o segundo formato, etc. Os formantes podem conter um número variável de linhas, e o número de linhas por formante pode ser diferente em cada arquivo.
Esse script usa o comando csplit
para dividir cada arquivo em várias partes. As partes ímpares contêm formant[1]
s, as partes pares contêm todo o resto.
Após dividir os dois arquivos, remova todas as partes ímpares do arquivo2 e remova todas as partes pares do arquivo1. Então cat
os arquivos restantes juntos para produzir a saída final.
Como modificamos o formato do nome do arquivo csplit
output, anexando o número do arquivo ao final, ambos os arquivos originais serão divididos no mesmo diretório e utilizamos a correspondência e a ordenação de padrões do shell para remover os arquivos e arquivos apropriados. remontar as peças restantes na ordem correta.
#!/bin/sh
USAGE="
$0: Usage: $0 file1 file2
$0 replaces formant[1]'s in file1 with formant[1]'s from file2
$0 prints the new version of file1 on standard output
"
TMP=tmp$$
mkdir $TMP
for i in 2 1
do
csplit --quiet --prefix="$TMP/" --suffix-format="%09d-$i" "${1:?$USAGE}" \
'/formant \[[12]\]/' '{*}'
shift
done
rm $TMP/*[13579]-2
rm $TMP/*[02468]-1
cat $TMP/*
rm -r $TMP
Isso produz a mesma saída que esta outra resposta