comm
только для отсортированных файлов,
Compare sorted files FILE1 and FILE2 line by line.
источник:https://linux.die.net/man/1/comm
поэтому алгоритм не будет работать для несортированных файлов. Это работает:
#!/bin/sh
sort -n a.txt > tmp.txt
END=4
for i in `seq 2 $END`
do
comm -12 --nocheck-order tmp.txt $i.txt |tee tmp.txt
done
cp tmp.txt "final.txt"
Вместо |tee
вы также можете использовать оператор >
на некоторых системах (запись в файл с перезаписью)
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
Вы можете использовать следующие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
На самом деле у вас есть только один шаблон в $0
и вы можете сэкономить несколько символов ввода с помощью
awk '/CCC 201[89]0[1-3]/{print $3; s+=$3; n++}END{print s/n}' file
615
918
111
548