Помогите с командой найти имя пользователя, содержащее менее 8 символов

Вот начало идеи:

compare -metric mse -subimage-search concat.png subimage.jpg resultimage.png
convert resultimage-1.png resultMap.txt
python extractPoints.py resultMap.txt

где extractPoints.py выглядит как

#!/bin/python
import os,re,argparse

parser = argparse.ArgumentParser(description='extract top match pixels from an Imagemagick text file.')
parser.add_argument('infile', type=str, help='infile name')
args = parser.parse_args()

d = {}
with open(args.infile, 'r') as f:
    for line in f:
        parsed_line = re.match('([0-9]+,[0-9]+): \([0-9]+,[0-9]+\)\s.*graya\(([0-9]+),[0-9]\)', line)
        if not parsed_line:
            continue
        if parsed_line.group(2) in d:
            d[parsed_line.group(2)].append(parsed_line.group(1))
        else:
            d[parsed_line.group(2)]=[parsed_line.group(1)]
    max_pixel_val = (max(d, key=int))
    print(d[str(max_pixel_val)])

Возможно, вы не используете интенсивность серого цвета,в этом случае вы можете изменить регулярное выражение или проанализировать начальную строку, в которой указана эта информация.

0
25.11.2019, 05:52
1 ответ

Если вы не ограничены использованием grep, то я бы предложил использовать awk, который естественным образом разбивает каждую строку на столбцы, разделенные пробелами -, а затем запрашивать строки, в которых первый столбец содержит меньше более восьми символов:

who | awk 'length($1) < 8 {print $1}'

Учитывая вывод из who, который выглядит следующим образом:

user1      pts/1        2019-11-24 16:31 (host1.example.com)
user1      pts/2        2019-11-24 16:31 (host1.example.com)
deadbeef   pts/3        2019-11-24 20:39 (host2.example.com)
aperson    pts/4        2019-11-24 20:39 (host3.example.com)
igotroot   pts/5        2019-11-24 20:39 (host4.example.com)

Приведенная выше команда awkвыдаст:

user1
user1
aperson

Вы можете направить вывод awkв sort -u, чтобы удалить дубликаты.

2
28.01.2020, 02:29

Теги

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