다음 줄이 포함된 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