次のファイルがあります。
This is an _PLUTO_
This is _PINEAPPLE_
This is _ORANGE_
This is _RICE_
次のコードを使用して出力を抽出します。
awk '{ print "Country: " $NF }' report.txt
出力:
Country: _PLUTO_
Country: _PINEAPPLE_
Country: _ORANGE_
Country: _RICE_
私の出力が次のように見えるようにすべての下線を削除するにはどうすればよいですか?
Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE
答え1
次のスニペットを使用できます。
$ awk '{ gsub("_", "", $NF); print "Country: " $NF }' report.txt
Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE
修正は内部で行われますので、お客様の場合はgsub()
交換結果が再度保存されます。$NF
gensub()
GNU awkを使用している場合は、少し簡単なthisを使用できます。
$ gawk '{ print "Country: " gensub("_", "", "g", $NF) }' report.txt
Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE
答え2
努力する
awk -F_ '{ print "Country: " $(NF-1) }' infile
試してみてくださいsed
。
sed -r 's/[^_]*_([^_]*)_.*/Country: \1/' infile
[^_]*_
最初に_
見えるまですべてを一致させます。([^_]*)_
上記の一致の後_
に次に表示されるまで、すべての項目を一致させ、.*
それ以降のすべての項目と一致しますが、一部だけが(...)
キャプチャされたグループのままにします。\1
~である逆参照([^_]*)
キャプチャされたグループ
答え3
代わりに使用してくださいsed
:
$ sed -E 's/^This is (an? )?/Country: /; s/\<_//; s/_\>//' file
Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE
これは3つの代替に適用されます。
This is
次のテキストをa
またはan
に置き換えますCountry:
。_
単語の先頭を削除します。_
単語の末尾から削除します。
最後の 2 つの置換はテーブルのデータを受け入れます。
This is a _big_blue_ball_
これは次のように変換されます。
Country: big_blue_ball
まさか
Country: big blue ball
別のawk
アプローチは、各行の最初の部分を無視し、スペースで区切られた最後のフィールドの最初と最後の文字を切り捨てることです。
awk '{ printf("Country: %s\n", substr($NF, 2, length($NF)-2)) }'
答え4
Pythonを使用して完了
#!/usr/bin/python
import re
l=[]
k=open('file.txt','r')
for i in k:
l.append(i)
m=re.compile(r'_.*')
for h in l:
out=re.search(m,h)
print "Country:",out.group().split('_')[-2]
出力
Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE