假设我有一个包含以下几行的 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
使用 awk 代替 grep。
awk '{print $2,$4}' /tmp/file.txt > /tmp/out.txt
cat file.txt
您正在将to的输出通过管道传输awk
。
然后使用 awk 表达式'{print $2,$4}'
,打印分割线的第二个和第四个字段,并用空格分隔。
您的输出将如您所愿。
答案4
由于上面已经提供了shell脚本方法,所以在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