wow, cela semble tellement compliqué dans le titre, mais je suppose que ce n'est pas tout à fait.
J'ai des fichiers texte qui ont fondamentalement cette mise en page: p> J'ai utilisé SED pour que tout entretien entre et puis d'autres informations extraites dont j'avais besoin. P> Cependant, les participants ne répondent parfois pas, auquel cas le fichier ressemble à ceci: Stimulus ...
...
...
...
Stimulus ...
...
...
...
Response
6 Réponses :
Une manière sale, bien qu'elle semblait fonctionner dans mon test, il pourrait être d'inverser le contenu du fichier, de rechercher à partir de la commande: p> rendements: p> réponse code> à
stimulus code> et inversez à nouveau le résultat. < P> En supposant que les données d'entrée suivantes: p>
réponse code> pièces. Il doit filtrer deux fois (basé sur un commentaire de la OP): p>
Élégant. Va le tester un retour.
Je l'ai testé et il y avait un petit problème car il n'y a pas seulement des pièces de stimulus isolées, mais également des pièces de réponse isolées. Cependant, faire la procédure deux fois le tour: TAC Infile | Sed -ne '/ Réponse /, / Stimulus / P' | tac - | sed -ne '/ stimulus /, / réponse / p';)
rendant ainsi tic-tac-toe!
Autre option est basculer vers supposant un fichier d'entrée comme: p> Perl code> et son flip-flop (opérateur de plage):
Stimulus 2...
...
...
...
Response 2
Stimulus 3...
...
...
...
Response 3
Ceci est un pure BASH Solution: xxx pré>
Il commence à remplir le tableau entrée: p> sortie: p> TMP code> Si une liste commençant par
stimulus code> trouvé. Si un autre
stimulus code> arrive, il efface simplement
TMP code> et démarre le travail à nouveau. Si
réponse code> trouvé, il imprime le contenu du tableau code> TMP code>. En réalité
printf code> intégré fait une boucle implicite. P>
Stimulus 2
...
Response 2
Stimulus 3
...
Response 3
Soumettre des trucs sur chaque réponse code>, même s'il n'y a pas de stimulus
code> avant. En outre, la regex est overkill:
[[$ l = réponse *]] code> aurait été suffisant.
@gniourf_gniourf: Pourriez-vous me dire quelle sera la sortie s'il n'y a pas de ligne commençant par Stimulus code> Je suppose une ligne vide. :) Bien sûr, vous pouvez utiliser la correspondance de Glob. Je préfère Regex .
Vous émettez le tableau TMP code> sur chaque référence
code>, tout ce qui se passe, même s'il n'y avait pas de relulos
code> avant. À cet égard, vous ne répondez pas vraiment à l'OP. Veuillez consulter le commentaire de l'OP dans la réponse de @ Birei.
@gniourf_gniourf: Vous avez raison. C'est une solution pour la question initiale. J'ai corrigé, merci!
Nous avons maintenant à peu près le même algorithme. +1 code>.
:) code>.
voici un pure BASH Solution qui essaie de Minimiser des effets secondaires stupides: gère également le cas où il y a une réponse code> mais aucun
stimulus code>. p> p >
mis à jour pour gérer les réponses isolées em> strong>
Est-ce que
'/ stimulus /, / réponse | stimulus / code> fonctionne? Hm .. probablement pas. Ceci est généralement résolu avec un script AWK qui définit une FLG pour les deux valeurs, lorsque les deux sont vrais, faites ce dont vous avez besoin. Bonne chance.