검색 텍스트와 jsonl 파일 사이의 교차점 찾기

검색 텍스트와 jsonl 파일 사이의 교차점 찾기

jsonl검색 텍스트와 특정 파일 사이의 교차점을 검색하여 찾고 싶습니다. 예는 다음과 같습니다:

검색 텍스트:

Alice goes to school

Jsonl 파일 콘텐츠:

{"text": "Alice goes to market"}

예상 출력:

Alice goes to

grep을 사용하여 구현하려고 했지만 예상한 동작이 출력되지 않았습니다.

답변1

당신이 소유한 것을 소유하세요 json:

example.json

{"text": "Alice goes to market"}

grep명령을 사용하면 작동하는 것 같습니다.

grep -Fo -f <(echo  "Alice goes to school" | xargs -n1) <(jq -r '.text' < example.json) | xargs

어디 grep:

  1. -F고정 문자열을 사용하고 regex.
  2. -o일치하는 문자열만 표시하는 데 사용됩니다.
  3. -f지정하는 데 사용무늬문서. 이 경우 grep다음 문자열이 검색됩니다: Alice, goes, to,school

jq -r출력을 JSON 텍스트 대신 원시 문자열로 표시합니다 . 따라서 "Alice goes to market"다음을 얻는 대신:Alice goes to market

<(echo "Alice goes to school" | xargs -n1)그것에 대해프로세스 교체파일을 전달하는 대신 이것을 사용합니다.
이 명령은 echo "Alice goes to school" | xargs -n1다음을 표시합니다.

Alice
goes
to
school

나는 또한 사용했다프로세스 교체여기: <(jq -r '.text' < example.json)json 키의 내용을 가져옵니다 text. 그러면 jq -r '.text' < example.json표시되는 내용은 다음과 같습니다.

"Alice goes to the market"

기본적으로 full이 수행하는 작업은 grep문자열의 모든 단어 Alice( , goes, to, )를 검색하는 것입니다.school"Alice goes to the market"

마지막으로 출력을 파이프하여 xargs다음 출력을 얻습니다.

Alice goes to

파이프()를 사용하지 않으면 | xargs다음과 같이 출력됩니다.분할기:

Alice
goes
to

기타 사례

json파일에 다음 내용이 포함되어 있는 경우 :

[
   {"text": "Alice goes to the market"}
]
[
   {"text": "Alice went to the market"}
]

위의 코드를 사용하면 실패하게 됩니다. 여기서는 text키가 첫 번째 위치(인덱스 0)에 있으므로 다음을 쉽게 사용할 수 있습니다.

grep -Fo -f <(echo  "Alice goes to school" | xargs -n1) <(jq -r '.[0].text' < example2.json) | sort -u | xargs

알아채다나는 이전에 sort -uxargs()에 대한 파이핑을 | xargs사용한 적이 있습니다 . grep문자열이 표시되기 때문입니다.중복위의 json 때문입니다. 제거하면 sort -u다음을 얻게 됩니다:

Alice goes to Alice to

사용comm

comm명령을 사용하여 교차점을 얻을 수도 있습니다 . 하지만 주문해야 해문서(Line)은 다음을 활용할 수 있습니다.

comm -12 <(echo "Alice goes to school" | xargs -n1 | sort) <(jq -r '.text' < example.json | xargs -n1 | sort)  | xargs

comm -12and에 있는 행만 인쇄합니다 (여기서 file1과 file2는 프로세스 대체를 나타냄).file1file2<(code...)

관련 정보