Armazena saída de um comando e o processa para outro

1

Estou trabalhando na linha de comando do Unix. Eu tenho dois arquivos. Eu quero cat file1.txt e grep a saída em file2.txt

Arquivo1.txt

123A
223A
143A
153A
183A
123J
123P

Arquivo2.txt:

123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 
123J ikik 780
123P haja 123
XRQE haja 123
XRQE haja 909

As últimas 2 linhas de file2.txt não estão presentes em file1.txt

Estou tentando fazer algo como:

head file1.txt | **and ??** grep file2.txt

Eu tentei com xargs , $variable armazená-lo, mas o shell trava ou não funciona.

Resultado esperado: Editado : %pr_e%

    
por Death Metal 12.09.2014 / 04:03

1 resposta

2

Eu estou supondo que você deseja procurar por seqüências de caracteres que estão presentes em file2.txt usando as seqüências de caracteres de file1.txt ?

Nesse caso, você pode usar a opção grep do -f para fazer isso.

trecho da página do homem do grep
  -f FILE, --file=FILE

Obtain patterns from FILE, one per line. The empty file contains zero patterns, and therefore matches nothing. (-f is specified by POSIX.)

Então, tente o seguinte:

$ grep -f file1.txt file2.txt 
123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 
123J ikik 780
123P haja 123

Passando uma parte do arquivo1.txt

Se, por outro lado, quiser pesquisar apenas uma parte das sequências presentes em file1.txt , pode utilizar o processo substituição para gerar dinamicamente um subconjunto de file1.txt e passar isso como um arquivo temporário para grep ' -f switch.

Por exemplo:
$ grep -f <(head -5 file1.txt) file2.txt 
123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 

Isso levará as primeiras 5 linhas de file1.txt e as transmitirá como um arquivo temporário via <(..) notation to grep .

    
por 12.09.2014 / 04:23