例如,我有一个包含字符串列表的文本文件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 中不保证数组遍历顺序(在本例中为由 构造的子字符串数组)。