Fichier:
Data inserted into table. Total count 13
No error occurred
Data inserted into table. Total count 45
No error occurred
Data inserted into table. Total count 14
No error occurred
Data inserted into table. Total count 90
No error occurred
Fichier de sortie attendu:
Data inserted into table. Total count 13
Data inserted into table. Total count 45
Data inserted into table. Total count 14
Data inserted into table. Total count 90
Je veux que la sortie ressemble à ceci: chaque seconde ligne sera supprimée mais il n'y aura pas d'espace entre les lignes.
text-processing
sed
awk
pmaipmui
la source
la source
grep -v "No error occurred" file
cette commande devrait fonctionner ... ce à quoi @paul a répondu. Dans le fichier de sortie, il n'y aura aucune ligne contenant "Aucune erreur ne s'est produite" dans cette partie.Réponses:
Avec
sed
:Avec POSIX
awk
:Si vous avez plus
awk
(commeoawk
), vous avez besoin de:Avec
ex
:éditera le fichier sur place.
g
marquer une commande globale/$/
correspondre à toutes les lignes+d
supprimer la ligne suivantewq!
Enregistrer toutes les modificationsCette approche partage le même idéal avec l'
sed
approche, supprimez chaque ligne suivante du début de la ligne actuelle de la ligne 1.Avec
perl
:et
perl6
:la source
n\;d
au lieu de'n;d'
sauvegarder un caractère précieux, mais cette logique sort de la fenêtre lorsque vous utilisez inutilement le-e
commutateur et une redirection de fichiers<
!sed -e 'n;d'
, vous permet d'économiser un personnage.n
commande écrit l'espace de motif sur la sortie standard si elle a-n
été utilisée, puis remplacez l'espace de motif par la ligne suivante. Voici chaque ligne impaire sera imprimée parn
, ligne paire puis lue dans l'espace de motif mais supprimez immédiatement pard
commande`.Résoudre ce problème en supprimant toutes les deux lignes peut être source d'erreurs (par exemple, lorsque le processus génère parfois deux lignes significatives au lieu d'une). Il est peut-être préférable de filtrer les déchets:
Il peut fonctionner comme un filtre, vous pouvez ajouter plus de modèles de déchets ici et améliorer le résultat.
la source
En réponse à la question, avec GNU
sed
:supprimera toutes les deux lignes, mais j'aimerais proposer des lignes de filtrage par son contenu:
ou avec le même résultat
la source
grep Data
etgrep -v 'No error'
Voici un moyen d'utiliser
sed
:Une autre façon avec GNU
sed
:Sortie des commandes ci-dessus:
la source
shortest way using sed
?g
commande?sed -n 'p;n'
est assez.g
. supprimé g de la commande. :)Vous pouvez essayer avec
awk
:ou vous ne pouvez imprimer que des lignes contenant
Data inserted
:la source
Une autre réponse, vous pouvez utiliser vi / vim!
Et puis si votre fichier était de 500 lignes (par exemple) tapez
Et puis pour écrire et quitter le type
Ou si quelque chose ne va pas et que vous ne souhaitez pas enregistrer:
Explication:
la source
Voici une façon très différente de procéder:
Cela suppose que les lignes impaires ne contiennent pas de tabulations. Si c'est le cas, vous devrez choisir un autre caractère séparateur, par exemple
:
ici:la source
sed
avec un fichier énorme (par exemple 20 lignes mil). Quoi qu'il en soit, +1 mais vraiment, pour éviter les maux de tête, choisissez un délimiteur qui ne se produira probablement pas dans un fichier texte, comme$'\002'
...seq 100000000 > 100mil.txt
. Lapaste|cut
solution s'est terminée en environ 7,5 secondes, contre près de 12 pour lased
solution. Semble être reproductible.grep
est le plus rapide. Ubuntu 14.04 avec des outils GNU standard.paste
+cut
sont fortement optimisés pour leur travail, alors sans surprise, leur combinaison est sacrément rapide ...Une autre option (plus courte)
la source
sed n\;d
, l'ajout-e
n'est que mon habitude.Cela résout également le problème, bien qu'il soit un peu plus lent:
la source