The UNIX and Linux Forums  


Go Back   El UNIX y Linux Foros > Arriba Foros > UNIX for Dummies Preguntas y Respuestas
.
google unix.com



UNIX for Dummies Preguntas y Respuestas Si no está seguro de que para publicar un UNIX o Linux cuestión, puesto que aquí. Todos los novatos en Linux, UNIX y bienvenida!

Más UNIX y Linux Foro Temas usted puede encontrar útiles
Hilo Hilo para principiantes Foro Respuestas Último mensaje
no contar de las palabras en una línea satish @ 123 Programación de scripts de shell y 7 05-21-2008 03:59 AM
Necesidad de identificar la línea que contiene @ entre en la línea de un archivo b.paramanatti UNIX for Dummies Preguntas y Respuestas 4 11-04-2007 10:50 PM
separar las palabras de una línea? skyineyes Programación de scripts de shell y 3 06-26-2007 10:00 AM
la eliminación de la línea y línea duplicado ocelote UNIX for Dummies Preguntas y Respuestas 11 01-30-2007 12:44 PM
Duplicar palabras zulander UNIX for Dummies Preguntas y Respuestas 1 04-01-2001 04:11 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback vínculo Herramientas de hilo Buscar en este Hilo Tasa de Hilo Modos de visualización
  #1 (Enlace permanente)  
Old 04-27-2007
srinivasan_85 srinivasan_85 is offline
Usuario Registrado
  
 

Fecha: enero 2007
Publicaciones: 28
Exclamation Identificar palabras duplicadas en una línea de comandos utilizando

Hola,
Permítanme explicar claramente el problema:
Deje que las entradas en mi archivo:

Código:
lion,tiger,bear
apple,mango,orange,apple,grape
unix,windows,solaris,windows,linux
red,blue,green,yellow
orange,maroon,pink,violet,orange,pink

¿Podemos detectar las líneas en las que una de las palabras (separadas por el separador de campo) se produce más de una vez, mediante un comando (o comando de cañería)?
En este caso, el comando debería detectar las líneas 2,3,5.

I realizada mediante una perl script (citado más abajo), aunque me pregunto si esto podría hacerse a través de un comando (la dificultad es que el no. de columnas no es constante).

Perl programa que he utilizado:

Código:
$fname=<STDIN>;
chomp $fname;
open(file,"<$fname");
$found_dups=0;

for $line(<file>)
{
  chomp $line;
  @arr=split(/,/,$line);
  for($i=1;$i<=$#arr;$i++)
  {
     for($j=$i+1;$j<=$#arr;$j++)
     {
        if($arr[$i] eq $arr[$j])
        {
           print "tid $arr[0]\n";
           $found_dups++;
        }
     }
  }
}
print "Found $found_dups duplicates\n";

Gracias,
Srini
  #2 (Enlace permanente)  
Old 04-27-2007
ghostdog74 ghostdog74 is offline Forum Advisor  
Usuario Registrado
  
 

Fecha: Sep 2006
Puestos: 2.556
Si usted tiene Python, aquí tienes una alternativa limpia:

Código:
#!/usr/bin/python
for line in open("file"):
    line = line.strip().split(",")
    if len(line) == len(set(line)):
        print "No change"
    else:
        print ','.join(line)

salida:

Código:
# ./test.py
No change
apple,mango,orange,apple,grape
unix,windows,solaris,windows,linux
No change
orange,maroon,pink,violet,orange,pink

  #3 (Enlace permanente)  
Old 04-27-2007
awk awk is offline
Usuario Registrado
  
 

Fecha: febrero 2007
Puestos: 134
awk-F, '(
for (i \u003d 1; I <NF; I + +)
(
para (J \u003d I +1; J <\u003d NF; J + +)
(
if ($ me \u003d\u003d $ J) (print $ I ":" $ 0)
)
)
) '<<ENDOFFILE
león, tigre, oso
manzana, mango, naranja, manzana, uva
Unix, Windows, Solaris, Windows, Linux
rojo, azul, verde, amarillo
naranja, marrón, rosa, violeta, naranja, rosa
ENDOFFILE
manzana: manzana, mango, naranja, manzana, uva
ventanas: Unix, Windows, Solaris, Windows, Linux
naranja: naranja, marrón, rosa, violeta, naranja, rosa
rosa: naranja, marrón, rosa, violeta, naranja, rosa
  #4 (Enlace permanente)  
Old 04-27-2007
srinivasan_85 srinivasan_85 is offline
Usuario Registrado
  
 

Fecha: enero 2007
Publicaciones: 28
Unhappy

Hola,
Gracias por las sugerencias. Entiendo que el trabajo puede hacerse por diferentes variantes de secuencias de comandos, pero lo que estoy ansioso es de "un solo comando / tubería comando" que pueden hacer el trabajo. Si sólo hay número determinado de entradas en cada línea, puedo comparar manualmente en la línea de comandos usando awk /perl. Sin embargo, desde que no conoce el no. de las entradas en cada línea, la tarea es complicada.
Me gustaría si me ilustrado un tubo versión de estos scripts.

Gracias
Srini
  #5 (Enlace permanente)  
Old 04-30-2007
kahuna's Avatar
Kahuna kahuna is offline
Usuario Registrado
  
 

Fecha: abril 2007
Puestos: 149
Srini, no estoy seguro si he entendido su reticencia a utilizar los scripts de publicación. Dicho esto, puede probar la secuencia de comandos a continuación. No es muy eficiente, pero es corto.

Código:
perl -nle 'print if /(^|,)([^,]+)(,|,.*,)\2(,|$)/;' <file

  #6 (Enlace permanente)  
Old 04-30-2007
matrixmadhan matrixmadhan is offline Forum Advisor  
Technorati Master
  
 

Fecha: marzo 2005
Ubicación: en el nodo hoja del árbol B +
Mensajes: 2.958
De nuevo con perl,
pero mucho más sencillo


Código:
#! /opt/third-party/bin/perl

open(FILE, "<", "file") || die "Unable to open file <$!> \n";

while(chomp($var=<FILE>)) {
  @arr = split(/,/, $var);
  foreach(@arr) {
    if( exists $fileHash{$_} ) {
      print $var . "\n";
      last;
    }
    else {
      $fileHash{$_} = $i++;
    }
  }
  %fileHash = ();
}

close(FILE);

exit 0

  #7 (Enlace permanente)  
Old 05-01-2007
srinivasan_85 srinivasan_85 is offline
Usuario Registrado
  
 

Fecha: enero 2007
Publicaciones: 28
Wink

Hola,
Creo que estoy equivocado.
Cita:
Publicado originalmente por Kahuna
Srini, no estoy seguro si he entendido su reticencia a utilizar los scripts de publicación.
Yo había dicho requisito cuando me envió esta cuestión, pero es que mi curiosidad me llevó a preguntar Guyz acerca de la "línea de comandos" versión de lo que mi perl programa podría hacer. No es que me envió descuidar los scripts, pero sólo que quería ampliar mis conocimientos sobre una línea (Tengo una fascinación hacia una línea).

Lo siento si mi escritura, aunque fue arrogante.

Gracias,
Srini
Closed Thread

Marcadores

Etiquetas
linux

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 11:52 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0