The UNIX and Linux Forums  


Go Back   O UNIX e Linux Forum > Top Fóruns > UNIX para Dummies Perguntas & Respostas
.
google unix.com



UNIX para Dummies Perguntas & Respostas Se não tiver certeza de onde se pode postar uma pergunta Unix ou Linux, postá-lo aqui. Todos os UNIX e Linux novatos bem vindos!

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
count não de palavras em uma linha satish @ 123 Programação Shell Script e 7 05-21-2008 03:59
Necessidade de identificar a linha que contém @, entre a linha de um arquivo b.paramanatti UNIX para Dummies Perguntas & Respostas 4 11-04-2007 10:50
separar as palavras de uma linha? skyineyes Programação Shell Script e 3 06-26-2007 10:00
eliminação da linha e duplicar linha ocelote UNIX para Dummies Perguntas & Respostas 11 01-30-2007 12:44
Duplicar palavras zulander UNIX para Dummies Perguntas & Respostas 1 04-01-2001 04:11

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 04-27-2007
srinivasan_85 srinivasan_85 is offline
Usuário
  
 

Join Date: Jan 2007
Lugares: 28
Exclamation Identificar palavras duplicadas em uma linha usando comando

Oi,
Deixe-me explicar o problema claramente:
Deixe as entradas no meu arquivo ser:

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 as linhas em que uma das palavras (separadas por um campo de separação) ocorre mais de uma vez, usando um comando (ou comando tubo)?
Neste caso, o comando deve detectar as linhas 2,3,5.

Eu é realizado utilizando um perl script (citados abaixo), mas pergunto-me se isto poderia ser feito através de um comando (a dificuldade é que o não. de colunas não é constante).

Perl programa que eu usei:

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";

Obrigado,
Srini
  #2 (permalink)  
Old 04-27-2007
ghostdog74 ghostdog74 is offline Forum Advisor  
Usuário
  
 

Join Date: Sep 2006
Mensagens: 2.554
Se você tiver o Python, aqui vai uma sucinta alternativa:

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)

Saída:

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 (permalink)  
Old 04-27-2007
awk awk is offline
Usuário
  
 

Join Date: Feb 2007
Lugares: 134
awk-F, '(
for (i \u003d 1; I <NF; i + +)
(
para (J \u003d I +1, J <\u003d NF; J + +)
(
if ($ i \u003d\u003d $ j) (print $ I ":" $ 0)
)
)
) '<<ENDOFFILE
leão, tigre, urso
maçã, manga, laranja, maçã, uva
Unix, Windows, Solaris, Windows, Linux
vermelho, azul, verde, amarelo
laranja, castanho-avermelhado, rosa, violeta, laranja, rosa
ENDOFFILE
Apple: maçã, manga, laranja, maçã, uva
janelas: Unix, Windows, Solaris, Windows, Linux
laranja: laranja, castanho-avermelhado, rosa, violeta, laranja, rosa
rosa: laranja, castanho-avermelhado, rosa, violeta, laranja, rosa
  #4 (permalink)  
Old 04-27-2007
srinivasan_85 srinivasan_85 is offline
Usuário
  
 

Join Date: Jan 2007
Lugares: 28
Unhappy

Oi,
Thanx para as sugestões. Entendo que o trabalho pode ser feito por diferentes variações de scripts, mas estou ansioso sobre o que é "um único comando / comando cachimbo", que podem fazer o trabalho. Se houver apenas determinado número de entradas em cada linha, posso compará-los manualmente na linha de comando usando awk /perl. Mas desde que eu não sei o n º. de entradas em cada linha, a tarefa é complicada.
Gostaria de ser esclarecido se eu receber uma versão do comando canalização destes scripts.

Obrigado
Srini
  #5 (permalink)  
Old 04-30-2007
kahuna's Avatar
Kahuna kahuna is offline
Usuário
  
 

Join Date: Apr 2007
Lugares: 149
Srini, não tenho certeza Entendo a sua relutância em usar os scripts destacado. Dito isto, você pode tentar o script abaixo. Não é muito eficiente, mas é curto.

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

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

Join Date: Mar 2005
Localização: nó folha na árvore B +
Mensagens: 2.958
Novamente com a perl,
mas muito mais simples


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 (permalink)  
Old 05-01-2007
srinivasan_85 srinivasan_85 is offline
Usuário
  
 

Join Date: Jan 2007
Lugares: 28
Wink

Oi,
Acho que estou enganado.
Citação:
Originally Posted by Kahuna
Srini, não tenho certeza Entendo a sua relutância em usar os scripts destacado.
Eu tinha uma tal exigência quando eu postou esta pergunta, mas foi a minha curiosidade que me dirigiram para guyz perguntar-lhe sobre a "linha de comando" do que a minha versão perl programa poderia fazer. Não é que estou a negligenciar os scripts postado, mas só que eu queria expandir meus conhecimentos sobre uma liners (tenho um fascínio perante uma liners).

Desculpa se a minha escritura foi arrogante embora.

Obrigado,
Srini
Closed Thread

Marcadores

Tags
linux

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 10:53.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0