Usando grep para filtrar

Usando grep para filtrar

Supongamos que tengo un archivo.txt con las siguientes líneas:

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

Ahora mi objetivo es filtrar las líneas para que salgan a out.txt de la siguiente manera:

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

Ahora sé que puedo usar:

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

para obtener las dos partes respectivas de la expresión individualmente. ¿Cómo combino estos comandos para obtener el resultado deseado?

Respuesta1

Dados sus datos de muestra, podría asumir que las palabras 2 y 4 son las que desea extraer; expresarías eso en awk con:

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

Respuesta2

Podrías usar cut:

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

Respuesta3

Usando awk en lugar de grep.

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

Estás canalizando la salida de cat file.txta awk.

Luego, usando expresiones awk '{print $2,$4}', imprime el segundo y cuarto campo de la línea dividida, con un espacio para separarlos.

Tu resultado será el que desees.

Respuesta4

Dado que el método de script de shell se proporcionó anteriormente, lo probé en Python y también funcionó bien

#!/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])

producción

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

información relacionada