Несколько шаблонов AWK

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вы также можете использовать оператор >на некоторых системах (запись в файл с перезаписью)

0
27.09.2020, 20:39
3 ответа
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
1
18.03.2021, 23:02

Вы можете использовать следующие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
1
18.03.2021, 23:02

На самом деле у вас есть только один шаблон в $0и вы можете сэкономить несколько символов ввода с помощью

awk '/CCC 201[89]0[1-3]/{print $3; s+=$3; n++}END{print s/n}' file
615
918
111
548
0
18.03.2021, 23:02

Теги

Похожие вопросы