使用单独的单词列表从文件中提取单词

使用单独的单词列表从文件中提取单词

例如,我有一个包含字符串列表的文本文件a.txt

one
two
three

我还有另一个包含字符串列表的文本文件,例如b.txt

threetwo
onetwothree
zero
twozero

我想要做的是比较两者并查找其中的任何字段是否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 函数的返回值index来确定 in 中的行是否b.txt包含 中的子字符串a.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.txt请注意, awk 中不保证数组遍历顺序(在本例中为由 构造的子字符串数组)。

相关内容