단일 열과 단어 목록의 일치를 기반으로 파일에서 일부 줄을 추출하고 싶습니다.
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