Терминал всегда доступен через /dev/tty
, независимо от того, откуда был перенаправлен стандартный ввод.
read -rs 'pw?Password: ' </dev/tty
Использование Raku (, ранее известного как Perl _6)
raku -e 'say.key, " => ",.value.words[1,3,5...*] for lines.split(/<[:\s]>/, :skip-empty).rotor(2).classify( *.[0]);'
Пример ввода:
ABCDEFG_10_node10:2154 ABCDEFG_10_node10:54
ABCDEFG_10_node10:2254 ABCDEFG_10_node10:64
ABCDEFG_10_node10:410 ABCDEFG_10_node10:10
ABCDEFG_10_node10:210 ABCDEFG_10_node10:10
ABCDEFG_10_node10:365
ABCDEFG_10_node10:890
ABCDEFG_10_node10:741
XXYZZ_71_node2:24: XXYZZ_71_node2:504:
X3y5z_53_node1:664: X3y5z_53_node1:990:
RCTY_11_node2:224: RCTY_11_node2:234:
Пример вывода:
XXYZZ_71_node2 => (24 504)
RCTY_11_node2 => (224 234)
ABCDEFG_10_node10 => (2154 54 2254 64 410 10 210 10 365 890 741)
X3y5z_53_node1 => (664 990)
Вкратце, lines
считываются, разрушая split
по :
и \s
(, опуская любые пустые элементы через :skip-empty
),rotor
(соединяя )каждые 2 элемента, иclassify
-с помощью первая из каждой пары. [Я мог бы позвонить .classify( *.[0].unique)
, чтобы уточнить намерения, но Раку в любом случае поступает правильно].
Если ОП действительно хочет формат, указанный в его/ее сообщении, то замените =>
на :
и добавьте вызов join
в конце вызова .value
, чтобы весь раздел до for
читается как:say.key, ": ",.value.words[1,3,5...*].join(",")
Пример вывода (2):
X3y5z_53_node1: 664,990
RCTY_11_node2: 224,234
ABCDEFG_10_node10: 2154,54,2254,64,410,10,210,10,365,890,741
XXYZZ_71_node2: 24,504