次の行を含む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
式の対応する2つの部分を別々に取得します。これらのコマンドを組み合わせて目的の出力を得るにはどうすればよいですか?
答え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}'
区切り線の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