{ printf '[13*%d-n[bs]pc]s%c\n' 9 a 7 b 5 c 3 d 1 e
tr -s ' \n' lx <file.txt; } | dc |
sed -f- -eb -e:s -e's/.*/\textbf{&}/' exam.txt
Isso usa a calculadora de notação de polimento inverso dc
para gerar um script sed
semelhante a:
8bs
17bs
... que é então concatenado com os scripts sed
inseridos na linha de comando e resulta em todos os números de linha que não estão incluídos no script gerado para serem b
ranched e para aqueles que são incluídos para ter a string \textbf{
inserida antes do que quer que exista na linha e }
anexado à sua cauda.
Funcionará para mais do que apenas as duas seções, é claro. Basicamente multiplica o número inicial em cada linha em file.txt
por 13 e então subtrai do produto 1, 3, 5, 7, 9 para um dos e, d, c, b, um respectivamente para chegar à lista de números de linha segmentados.
Em qualquer caso, tudo que o sed
tem que fazer no final é a impressão padrão que ele faz para cada linha que ele não edita antes de se ramificar, ou então fazer a única substituição para sua string. tr
e dc
são ambos muito utilitários rápidos, e eles lidam com quase todo o pré-processamento.
Possíveis vantagens para essa abordagem:
-
Nenhuma comparação precisa ser feita entre os dois arquivos.
-
Nenhuma correspondência de expressão regular é obrigatória.
-
Embora seja verdade, o processamento de
sed
pode se beneficiar levemente de um filtro adicional inicial para evitar que ele tente corresponder a todos os > números de linha em relação àqueles na lista, como:... | sed -e'/^[ABCDE] /!b' -f- ...
-
-
As respostas em arquivo.txt não precisam estar em nenhuma ordem específica ou até representam completamente todas as perguntas em exam.txt .
Possíveis desvantagens:
-
Cada carta de resposta em arquivo.txt deve estar em minúsculas.
- use
tr -s '[:upper:] \n' \[:lower:]lx
para lidar com / ou.
- use
-
É necessário pelo menos um espaço intermediário e uma nova linha interveniente entre o número de resposta e a resposta e, respectivamente, entre cada resposta em arquivo.txt , embora seja permitido um número maior com a exceção que nenhuma linha em branco pode ser encontrada antes da primeira resposta, e nenhuma linha pode começar ou terminar com espaços.
-
Cada bloco de pergunta / resposta em exam.txt deve ser composto por exatamente 13 linhas (exceto a última, que não precisa incluir uma linha em branco à direita) .
Isso depende de uma ou duas extensões dc
do GNU conforme escritas. Aqui está uma versão mais portátil:
{ printf '[13*%d-p[s]pc]s%c\n' 9 a 7 b 5 c 3 d 1 e
tr -s ' \n' lx <file.txt;}| dc | paste -db - -|
sed -f- -eb -e:s -e's/.*/\textbf{&}/' exam.txt
... de qualquer forma, você escreve:
\item
Which of the following lorem ipsun are the best playstation games you have played?
A Pattman
B Pokemon
\textbf{C Lorem}
D Ipsun
E Heillui
\item
Which of the following lorem ipsun are the best playstation games you have played?
\textbf{A Pattman}
B Pokemon
C Lorem
D Ipsun
E Heillui