1 votos

Separación de números pares e impares

Tengo un fichero con los 100 primeros números y tengo que llevar sólo los números pares a otro fichero. ¿Cómo puedo hacer esto con grep ?

1 votos

¿Los números están separados por una nueva línea?

1 votos

En primer lugar, ¿qué ha probado hasta ahora? En segundo lugar, esto es básicamente la continuación de su pregunta anterior ( askubuntu.com/questions/891106/ ). ¿En qué se diferencia? ¿Por qué no has pedido que se reabra la pregunta en los comentarios en lugar de publicar una nueva?

0 votos

@Serg Yo diría que se diferencia en que la otra pregunta es demasiado amplia y esta no. Sí mejor editar la otra, pero los nuevos usuarios no siempre son conscientes de lo que consideramos mejores prácticas :)

2voto

heemayl Puntos 21116

Suponiendo que los números estén separados por una nueva línea, con awk :

awk '! ($0 % 2)' file.txt

Para guardar la salida en un archivo:

awk '! ($0 % 2) {print >"even.txt"}' file.txt 

Ejemplo:

% cat file.txt             
1
2
3
4

% awk '! ($0 % 2)' file.txt
2
4

% awk '! ($0 % 2) {print >"even.txt"}' file.txt 

% cat even.txt 
2
4

1voto

brndn2k Puntos 41

Utilizar regex con grep

grep "^[0-9]*[13579]$" FILE > oddsfile.txt

grep "^[0-9]*[02468]$" FILE > evensfile.txt

Esto canaliza el archivo en el grep, que coincide con la regex y lo escribe en un archivo

1 votos

En primer lugar, su mando está equivocado. Esto sacará sólo 1,3,5,7,9 al archivo. Los números impares de 0 a 100 incluyen más que eso. En segundo lugar, usted está utilizando inútil cat ; en cambio grep puede tomar el archivo como argumento.

0 votos

^ \d *[13579]$ significa Inicio, 0 o más dígitos, uno de 1 3 5 7 9, fin. Sólo coincidirá con los números que terminan en dígitos impares, que son números impares. Lo mismo para los pares

0 votos

¿Lo ha probado usted mismo? Ver paste.ubuntu.com/24150036

1voto

Zanna Puntos 502

Si los números están separados por espacios (todos en una línea), pruebe esto:

grep -E '(^| )1?[0-9]?[02468]( |$)' file

¡Lo tengo!

Añade el -o para la coincidencia y la redirección a un nuevo archivo:

grep -Eo '(^| )1?[0-9]?[02468]( |$)' file > newfile

Si los números están separados por una nueva línea:

grep -E '^1?[0-9]?[02468]$' file > newfile

Notas:

  • -E utilizar expresiones regulares ampliadas
  • (this|that) coincide con this o that
  • ^ inicio de línea
  • $ fin de línea
  • ? cero o uno de los caracteres anteriores

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X