複数行から共通の数字を抽出するには?

複数行から共通の数字を抽出するには?
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 25927grep /commonnumber present in all lines/ file

ベストアンサー1

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

説明する:

  • -nプログラム全体にループが追加されます。たとえば、次のようになります。

    while (<>) { ... }
    
  • -EPerlは(そのループ内で)コマンドラインを実行する必要があります。活用可能性も高まるsay

  • /(\d+)/g各行は、各数字(互いに隣り合う数字)と一致する行に個別に渡されます。に入力すると、各数字がmap

  • %aこれまで、すべての行に表示される数値辞書です。各行()が再計算されます%a = ...

  • 最初の行では、$. == 1すべての数字が辞書に格納されます。 (数字、1)ペアを追加すると、1はtrueを表します。

  • ()他の行では、最後の反復にも表示されない限り、すべての数字がフィルタリングされます$a{$_} ?

  • 最後のEND{...}印刷すべての行ですべての数字が繰り返される

おすすめ記事