Usando grep para filtrar

Usando grep para filtrar

Suponha que eu tenha um arquivo.txt com as seguintes linhas:

hello myname1 is yellow.pcapng red
festive myname33 is hddd.pcapng dfdf
crude myname44 is hello.pcapng

Agora, meu objetivo é filtrar as linhas para que a saída seja out.txt da seguinte maneira:

myname1 yellow.pcapng
myname33 hddd.pcapng
myname44 hello.pcapng

Agora eu sei que posso usar:

grep -oh "\w*myname\w*" /tmp/file.txt  > /tmp/out.txt
grep -o '[^ ]\+g' /tmp/file.txt > /tmp/out.txt 

para obter as duas partes respectivas da expressão individualmente. Como combino esses comandos para obter a saída desejada?

Responder1

Dados seus dados de amostra, você pode assumir que as palavras 2 e 4 são o que deseja extrair; você expressaria isso em awk com:

awk '{ print $2, $4 }' < /tmp/file.txt > /tmp/out.txt

Responder2

Você poderia usar cut:

cut -d' ' -f2,4 < /tmp/file.txt > /tmp/out.txt 

Responder3

Usando awk em vez de grep.

awk '{print $2,$4}' /tmp/file.txt > /tmp/out.txt

Você está canalizando a saída de cat file.txtto awk.

Então, usando expressões awk '{print $2,$4}', você está imprimindo o 2º e o 4º campo da linha de divisão, com um espaço para separar.

Sua saída será como você deseja.

Responder4

Como o método shell script foi fornecido acima, tentei em Python e funcionou bem também

#!/usr/bin/python
o=[]
k=open('i','r')
for z in k:
    o.append(z.strip().split(' ')[1])
        o.append(z.strip().split(' ')[3])
for d in range(0,len(o),2):
    print " ".join(o[d:d+2])

saída

myname1 yellow.pcapng
myname33 hddd.pcapng
myname44 hello.pcapng

informação relacionada