grep을 사용하여 필터링

grep을 사용하여 필터링

다음 줄을 포함하는 file.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

grep 대신 awk를 사용하세요.

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

cat file.txt의 출력을 으로 파이핑하고 있습니다 awk.

그런 다음 awk 표현식을 사용하여 '{print $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

관련 정보