이와 같은 데이터가 있고 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
파이썬
#!/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
실제로, 당신은 하나의 모드만 가지고 $0
있으며 다음과 같이 입력하는 몇 글자를 절약할 수 있습니다.
awk '/CCC 201[89]0[1-3]/{print $3; s+=$3; n++}END{print s/n}' file
615
918
111
548