別の単語リストを使用してファイルから単語を抽出する

別の単語リストを使用してファイルから単語を抽出する

たとえば、文字列のリストを含むテキストファイルがあります。a.txt

one
two
three

次の文字列のリストを含む他のテキストファイルがあります。b.txt

threetwo
onetwothree
zero
twozero

私がしたいのは、2つのフィールドを比較し、そのフィールドの1つにb.txt次の内容が含まれているかどうかを見つけることです。a.txt

この場合の出力例は次のとおりです。

threetwo > two, three
onetwothree > one, two, three
twozero > two

私の説明が十分に説明されていない場合は、C#で作成して期待どおりの結果を得ることができます。

List<string> allElements = new List<string> { "one", "two", "three" };
string str = "onetwothree";
var containingElements = allElements.Where(element => str.Contains(element));
foreach(string element in containingElements)
{
    Console.WriteLine(element);
}

上記のコードを実行できますdotnetfiddle.net

私はawkを使ってこれを達成したいと思います。どんな助けでも大変感謝します。

答え1

awk関数の戻り値を使用して、inの行にinの部分文字列が含まれていることをindex確認できます。b.txta.txt

index(in, find)

    Search the string in for the first occurrence of the string find, and return 
the position in characters where that occurrence begins in the string in.

たとえば、

awk '
  NR==FNR{strings[$1]; next}
  {
    m = ""
    for(s in strings){
      if(index($0,s) > 0) m = (m=="") ? s : m ", " s
    }
  }
  m != "" {print $0, ">", m}
' a.txt b.txt
threetwo > three, two
onetwothree > three, two, one
twozero > two

a.txtawkでは、配列の巡回順序(この場合は構成された部分文字列の配列)は保証されません。

関連情報