단어 목록을 사용하여 단일 열을 파악하는 방법

단어 목록을 사용하여 단일 열을 파악하는 방법

단일 열과 단어 목록의 일치를 기반으로 파일에서 일부 줄을 추출하고 싶습니다.

awk에서는 다음과 같은 것을 사용할 수 있습니다.

awk '$5 == "someword" {print}' file.txt

나는 다음과 같이 grep을 사용할 수 있다는 것을 알고 있습니다.

grep -f listofwords.txt file.txt

파일의 단일 열을 기반으로 단어 목록을 파악하는 방법을 알려주실 수 있나요?

A   something  something2
B   something2 something3
C   something3 something4
D   something4 something5
G   something5 something6

내가 원하는 것은 열 2를 기반으로 하는 단어 벡터입니다.

something
something4

원하는 출력:

A   something  something2
D   something4 something5

답변1

나에게 이것은 awk의 일반적인 사용 사례처럼 보입니다.

awk 'NR == FNR { keywords[$1]=1; next; }
               { if ($2 in keywords) print; }' listofwords.txt file.txt

"NR == FNR" 조건이 true일 때 두 개의 파일을 awk에 전달합니다(레코드 수가 현재 파일의 레코드 수와 동일합니다. 이는 첫 번째 파일을 읽고 있음을 의미함). 그런 다음 목록을 저장합니다. "키워드" 배열의 키워드를 선택하고 다음 레코드로 이동합니다. 또 다른 (포괄적) 조건은 (file.txt의) 필드 2가 키워드 중 하나인지 확인하고, 그렇다면 해당 행을 인쇄합니다.

답변2

while목록의 각 문자열에는 단어 경계가 필요하므로 루프를 사용할 수 있습니다 .

while read -r list; do
    grep -E "^[^ ]* +$list\>[^ ]* +.*$" input_file
done < list_file
A   something  something2
D   something4 something5

또는

$ grep -Ee '^[^ ]* +something\>[^ ]* +.*$' -e '^[^ ]* +something4[^ ]* +.*$' input_file
A   something  something2
D   something4 something5

관련 정보