Как извлечь общее число из нескольких строк?

http://abc/blah/hhh/25927/3456/bb http://vfg/blahgg/hhvvh/kkk/25927/2378/bb/mm http://lah/hhh/25927/fff/bb/somthin 

в приведенных выше строках общее число 25927 всегда встречается как / 25927 /, и оно присутствует в каждой строке. Но число – переменная, которую я не знаю заранее, поэтому я не могу использовать grep 25927 ; вместо этого он должен быть чем-то вроде grep /commonnumber present in all lines/ file

  • grep содержимое файлов на основе списка файлов
  • Как правильно форматировать вывод с помощью команды Awk printf?
  • Получить имя файла после find -name | xargs
  • agrep с направленными смещенными штрафами
  • Есть ли стандартная команда, которая всегда выходит с ошибкой?
  • grep точный блок строк (содержимое файла1) из файла2
  • Строки Grep со случайными числовыми символами
  • Лучше ли архивировать / перемещать почту на основе mtime или ctime?
  • Значение корня: колесо
  • Как печатать имена символа Unicode для строки ввода?
  • Как я могу применить карет-замену к моей n-й-последней команде?
  • Получить строку запроса из URL-адресов в файле журнала
  • 3 Solutions collect form web for “Как извлечь общее число из нескольких строк?”

     perl -nE '%a = map { $.==1 || $a{$_} ? ($_,1):()} /(\d+)/g; END{ say keys %a}' file 

    Объяснение:

    • -n добавит цикл по всей программе, например:

       while (<>) { ... } 
    • -E необходим perl для выполнения командной строки (внутри этого цикла). Это также добавляет возможность использовать

    • Каждая строка передается в /(\d+)/g которая соответствует каждому числу (цифры рядом друг с другом) отдельно. Каждое число, если оно подано на map .

    • %a – словарь чисел, появляющихся во всех строках до сих пор. Он пересчитывает каждую строку ( %a = ... ).

    • в первой строке $. == 1 $. == 1 все числа хранятся в словаре – добавляется пара (число, 1); 1 означает True

    • в других строках все числа отфильтровываются () если они не присутствовали в последней итерации $a{$_} ? ,

    • Наконец, END{...} печатает все числа, которые повторяются по всем строкам .

     $ awk -F/ 'NR==1{for(i=1;i<=NF;i++){Arr[$i]++}next}{for(j=1;j<=NF;j++){if ($j in Arr){Arr[$j]++}}}END{for (k in Arr){if(NR==Arr[k]&&k+0!=0){print k,Arr[k]}}}' input.txt 

    извлеките первую строку с помощью delimter / и сохраните ее в массиве. со второй строки, проверьте, существует ли поле в массиве. если он есть в массиве, то увеличьте значение. В конце проверьте значение на номер строки и убедитесь, что его номер.

    Если вы знаете, что всегда будет 5 цифр в строке, разделенной символом косой черты (как на пути выше), вы можете попробовать что-то вроде:

    egrep [/] [0-9] {5} [/] файл

    Использование egrep позволяет использовать расширенный синтаксис регулярных выражений, если вы используете, кроме GNU-версии grep. См. Справочную страницу для получения дополнительной информации о вашей версии grep.

    Linux и Unix - лучшая ОС в мире.