perl -nE '%a = map { $.==1 || $a{$_} ? ($_,1):()} /(\d+)/g;
END{ say keys %a}' file
Пояснение:
-n
добавит цикл по всей программе, например:
while (<>) {...}
-E
необходим Perl для выполнения командной строки (внутри этого цикла). Он также добавляет возможность использовать say
Каждая строка передается в / (\ d +) / g
, который соответствует каждому числу (цифры рядом друг с другом) отдельно. Каждое число вводится в карту
.
% a
- это словарь чисел, которые до сих пор появлялись во всех строках. Он пересчитывается в каждой строке (% a = ...
).
в первой строке $. == 1
все числа сохраняются в словаре - добавляется пара (число, 1); 1 означает True
в других строках, все числа отфильтровываются ()
, если они также не присутствовали в последней итерации $ a {$ _}?
.
Наконец, END {...}
выводит все числа, которые повторяются во всех строках .
Для CentOS 7 вы можете попробовать это:
yum install epel-release-7