다음 값을 가진 파일을 고려해보세요:
foo
boo
too
그리고 또 하나:
foo,1
foo,2
boo,1
soo,1
출력이 다음과 같은 두 번째 파일에서 첫 번째 일치 항목만 얻으려면 어떻게 해야 합니까?
foo,1
boo,1
답변1
어때요?
$ awk -F, 'NR==FNR {a[$1]; next} $1 in a {print; delete a[$1]}' file1 file2
foo,1
boo,1
답변2
유명한 관용구의 변형.
awk -F, 'FNR==NR{a[$1]=1;next} a[$1]++==1' file1 file2
고쳐 쓰다
soo,#
@dave_thompson_085가 지적했듯이 두 번째 파일에 둘 이상이 있을 수 있으며 이로 인해 a[$1]++==1
두 번째 파일도 동일한 작업을 수행하게 됩니다. 그는 또한 다음과 같은 몇 가지 해결책을 제시했습니다.
awk -F, 'FNR==NR{a[$1]=1;next} !--a[$1]' file1 file2
답변3
실제로는 아니지만 awk
작동합니다. 쉽게 확장할 수 있을 것 같아요.
#!/usr/bin/env bash
while IFS= read -r line; do
grep -m1 "$line" "$2"
done < "$1"
$ ./script.sh file1 file2
한 줄씩 읽기https://stackoverflow.com/questions/10929453/read-a-file-line-by-line-locationing-the-value-to-a-variable.
그런 다음 "file2에서 첫 번째 줄 내용을 찾습니다."
답변4
나는 또한 awk를 사용했지만 방법이 다릅니다
주문하다
awk -F "," 'NR==FNR{a[$1];next}($1 in a){print $0}' file1.txt file2.txt| awk -F "," '{if (!seen[$1]++)print }'
산출
awk -F "," 'NR==FNR{a[$1];next}($1 in a){print $0}' file1.txt file2.txt| awk -F "," '{if (!seen[$1]++)print }'
foo,1
boo,1