Archivo:
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
Archivo de salida esperado:
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
Quiero que la salida se vea de esta manera: cada segunda línea se eliminará pero no habrá espacio entre las líneas.
text-processing
sed
awk
pmaipmui
fuente
fuente
grep -v "No error occurred" file
este comando debería funcionar ... lo que @paul ha respondido. En el archivo de salida, no habrá líneas que contengan "No se produjo ningún error" en esta parte.Respuestas:
Con
sed
:Con POSIX
awk
:Si tiene más edad
awk
(me gustaoawk
), necesita:Con
ex
:editará el archivo en el lugar.
g
marcar un comando global/$/
unir todas las líneas+d
eliminar la siguiente líneawq!
guardar todos los cambiosEste enfoque comparte el mismo ideal con el
sed
enfoque, elimine cada línea siguiente del inicio de línea actual de la línea 1.Con
perl
:y
perl6
:fuente
n\;d
lugar de'n;d'
guardar un personaje precioso, pero esa lógica desaparece cuando usas innecesariamente el-e
interruptor y la redirección de un archivo<
!sed -e 'n;d'
, te ahorra un personaje.n
comando escribir espacio de patrón en la salida estándar si-n
se utilizó, luego reemplazar el espacio de patrón con la siguiente línea. Aquí se imprimirá cada línea imparn
, la línea par luego se leerá en el espacio del patrón pero se eliminará inmediatamente pord
comando`.Resolver esto eliminando cada segunda línea puede ser propenso a errores (por ejemplo, cuando el proceso a veces genera dos líneas significativas en lugar de una). Puede ser mejor filtrar la basura:
Puede ejecutarse como filtro, puede agregar más patrones de basura aquí y mejorar el resultado.
fuente
En respuesta a la pregunta, con GNU
sed
:eliminará cada segunda línea, pero me gustaría ofrecer líneas de filtro por contenido:
o con el mismo resultado
fuente
grep Data
ygrep -v 'No error'
Aquí hay una manera de usar
sed
:Otra forma con GNU
sed
:Salida de los comandos anteriores:
fuente
shortest way using sed
?g
mando?sed -n 'p;n'
es suficiente.g
. quitó g del comando. :)Puedes probar con
awk
:o puede imprimir solo líneas que contengan
Data inserted
:fuente
Otra respuesta, ¡podrías usar vi / vim!
Y luego, si su archivo tenía 500 líneas (por ejemplo), escriba
Y luego escribir y salir de tipo
O si algo sale mal y no quieres guardar:
Explicación:
fuente
Aquí hay una forma bastante diferente de hacerlo:
Esto supone que las líneas impares no contienen pestañas. Si lo hacen, entonces deberá elegir otro carácter separador, por ejemplo,
:
aquí:fuente
sed
con un archivo enorme (por ejemplo, 20 mil líneas). De todos modos, +1 pero realmente, para evitar dolores de cabeza, elija un delimitador que es poco probable que ocurra en un archivo de texto, como$'\002'
...seq 100000000 > 100mil.txt
. Lapaste|cut
solución terminó en aproximadamente 7,5 segundos, frente a casi 12 para lased
solución. Parece ser repetible.grep
Sin embargo, es el más rápido. Ubuntu 14.04 con herramientas GNU estándar.paste
+cut
están muy optimizados para su trabajo, por lo que, como era de esperar, su combinación es bastante rápida ...Otra opción (más corta)
fuente
sed n\;d
, agregar-e
es solo mi hábito.También resuelve el problema, aunque es un poco más lento:
fuente