Uma espécie de gato invertido [fechado]

1

Eu tenho dois documentos que são o resultado de consultas SQL.

Por exemplo, eu tenho meu Doc1.lst :

    John1    0
    Julien  10
    Jules3   0
    Julie   30

Neste Doc1.lst, usei sed para ter apenas a parte do nome, então Doc2.lst é:

    John1
    Julien
    Jules3
    Julie

Eu não domino o suficiente o comando sed para capturar apenas os números, então gostaria de saber se existe uma maneira de criar um Doc3.lst que pegue o Doc1.lst e exclua nele o conteúdo do Doc2.lst

Seria uma espécie de catenate invertida. A propósito, se você tiver o comando sed para capturar somente os números que seriam ótimos.

    
por Julien S 11.03.2015 / 09:12

3 respostas

5

Para obter a saída desejada, você pode usar awk , cut ou sed . O primeiro é preferível.

Se o seu arquivo Doc1.lst é como segue

John1    0
Julien  10
Jules3   0
Julie   30

O seguinte comando awk obterá a saída desejada. Assumindo que o separador de campo é um espaço.

awk '{print $1}' Doc1.lst

Usando cut

cut -d' ' -f1 Doc1.lst

Ou usando sed . Nota. sed é um editor de fluxo e você não quer usar sed para esta tarefa. Mas aqui está a linha que você quer de qualquer maneira.

sed 's/\([a-zA-Z]*\).*//' Doc1.lst

    
por 11.03.2015 / 09:54
2

awk '{print $1}' Doc1.lst > Doc3.lst

    
por 11.03.2015 / 09:33
1
tr -s '[:space:]' \n <infile | grep '^[0-9]'

... ou ...

sed '/^[0-9]/P;y| |\n|;D' <infile

... ou provavelmente apenas ...

sed 's/.* //' <infile

... no último caso, talvez você queira fazer s/ *$// primeiro, caso haja espaços à direita.

Mais geralmente, você pode numerar um grupo com sed ...

sed 's/ *[^ ]\{1,\} *//' <infile

... escrito assim tiraria de uma linha o primeiro grupo de caracteres não-espaciais e todos os espaços circundantes - o que os deixaria com os números. No entanto ...

sed 's/ *[^ ]\{1,\} *//2' <infile

... em vez disso, faria o mesmo com o segundo grupo não-espacial por linha - o que deixaria você com apenas os nomes.

    
por 11.03.2015 / 10:45

Tags