Ao olhar para outra pergunta, me deparei com um problema que não consegui resolver geralmente para o awk, onde se um programa awk pega dois arquivos (ou seja, para ler as entradas do primeiro em uma matriz para comparar, como geralmente é o caso) o que é a melhor maneira de lidar com a mudança de RS entre arquivos?
Dados os seguintes arquivos:
~$> cat awktest1.txt
111 112 113 114|121 122 123 124|131 132 133 134|141 142 143 144
~$> cat awktest2.txt
211 212 213 214
221 222 223 224
231 232 233 234
241 242 243 244
se eu quisesse executar o seguinte, como um exemplo básico:
#! /usr/bin/awk -f
# awktest.awk file1 file2
# cant swap RS between files
BEGIN { RS="|" }
NR>ONR && ONR==1 { RS="" }
{ print $1 "." $2 "." $3 "." $4 }
# will work with with, but this is GNU only.
# ENDFILE { RS="" }
END { print "\nfinal $0: \n" $0 }
então, como RS
está mudando depois que o primeiro registro do segundo arquivo foi lido, então neste (exemplo reconhecidamente inventado) a saída é:
~$>./awktest.awk awktest1.txt awktest2.txt
111.112.113.114
121.122.123.124
131.132.133.134
141.142.143.144
211.212.213.214
final $0:
211 212 213 214
221 222 223 224
231 232 233 234
241 242 243 244
com todo o segundo arquivo sendo lido como um único registro, em vez de 4. Claramente, com este exemplo, seria simples corrigir o problema antes do awk, mas existe alguma maneira realmente no awk?