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.txt
to 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