このようなデータがあり、CCCのVar列を抽出したいのですが、2018年と2019年の最初の3ヶ月間だけ抽出したいと思います。
ID Date Var
--- ------ ---
AAA 201701 110
BBB 201705 211
CCC 201710 312
AAA 201712 413
BBB 201801 514
CCC 201801 615
AAA 201802 716
BBB 201802 817
CCC 201803 918
AAA 201803 119
BBB 201804 220
CCC 201804 321
AAA 201901 222
BBB 201902 312
CCC 201903 111
出力は615,918,111でなければなりません。
デートパターンを作りたいです。
これまで私はこれを試しました
awk '/CCC/ && /201801/ && /201802/ && /201901/ && /201902/&& /201903/ { print $3 } ' file.txt
awk ' $1 ~ /CCC/ || /201801/ && /201802/ && /201901/ && /201902/&& /201903/ { print $3 } ' file.txt
答え1
awk '$1 == "CCC" && $2 ~ /201[89]0[123]/{print $3}' filename
出力
615
918
111
Python
#!/usr/bin/python
import re
u=re.compile(r'201[89]0[123]')
k=open('filename','r')
k.read
for i in k:
j=i.split(' ')
if j[0] == "CCC":
if re.search ( u,j[1]):
print j[2].strip()
出力
615
918
111
答え2
以下を使用できます。awk
$ awk '$1 ~ /CCC/ && $2 ~ /201(8|9)0(1|2|3)/ {print $3}' file.txt
615
918
111
修正する
平均の場合:
awk '$1 ~ /CCC/ && $2 ~ /201(8|9)0(1|2|3)/ {print $3; sum+=$3; n+=1} END { print "Average: " sum/n }' file.txt
615
918
111
Average: 548
答え3
実際には、1つのモードしか持って$0
おらず、次のように入力するいくつかの文字を節約できます。
awk '/CCC 201[89]0[1-3]/{print $3; s+=$3; n++}END{print s/n}' file
615
918
111
548