Использование grep для фильтрации

Использование grep для фильтрации

Предположим, у меня есть файл .txt со следующими строками:

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

Теперь моя цель — отфильтровать строки так, чтобы они выводились в out.txt следующим образом:

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

Теперь я знаю, что могу использовать:

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

чтобы получить обе соответствующие части выражения по отдельности. Как мне объединить эти команды, чтобы получить желаемый результат?

решение1

Учитывая ваш пример данных, вы можете предположить, что слова № 2 и № 4 — это то, что вы хотите извлечь; вы выразите это в awk с помощью:

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

решение2

Вы можете использовать cut:

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

решение3

Использование awk вместо grep.

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

Вы перенаправляете вывод cat file.txtв awk.

Затем с помощью выражений awk '{print $2,$4}'вы печатаете 2-е и 4-е поля разделенной строки, разделяя их пробелом.

Результат будет таким, как вы хотите.

решение4

Поскольку метод скрипта оболочки был предоставлен выше, я попробовал его на Python и он тоже отлично сработал.

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

выход

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

Связанный контент