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

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

  • cURL доступ к сайту HTTPS
  • Число новых строк в строке как целое
  • Какие знания о ядре могут получить новичок?
  • grep --include действует как --exclude
  • Почему терминал автоматически вводит мою команду после вставки текста?
  • grep -A с обратной совпадением распечатывает только несоответствие в поле после
  • Получить серийный номер из Показать инвентарь
  • Awk - значения совпадения между двумя файлами и создание нового файла
  • Найдите строку в файле и переименуйте несколько файлов в результаты
  • `set -e` и` grep` idiom для предотвращения преждевременного выхода из сценария оболочки, когда шаблон не найден
  • Grep_color на mac
  • Какие команды я могу использовать для включения / отключения модулей Apache2?
  • 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 - лучшая ОС в мире.