예를 들어 문자열 목록이 포함된 텍스트 파일이 있습니다.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 함수의 반환 값을 사용하여 in 의 행에 in 의 하위 문자열이 포함되어 index
있는지 확인할 수 있습니다 .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에서는 배열 순회 순서(이 경우 구성된 하위 문자열 배열)가 보장되지 않습니다.