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