별도의 단어 목록을 사용하여 파일에서 단어 추출

별도의 단어 목록을 사용하여 파일에서 단어 추출

예를 들어 문자열 목록이 포함된 텍스트 파일이 있습니다.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.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에서는 배열 순회 순서(이 경우 구성된 하위 문자열 배열)가 보장되지 않습니다.

관련 정보