나는 현재 사용하고 있습니다
$ awk 'NR==FNR{a[$1];next} ($3 in a)' find.txt path_to_100_files/*
find.txt 문자열을 사용하여 path_to_100_files/에 있는 여러 파일에서 일치하는 항목을 검색합니다.
find.txt에는 다음이 포함됩니다.
[email protected]
[email protected]
그런 다음 path_to_100_files/에는 파일이 포함됩니다.
0.0.0.0:002921931:[email protected]
123.0.0.1:00029382:[email protected]
지금은 find.txt의 문자열에 대한 세 번째 열을 검색하는 것뿐입니다. 하지만 전체 파일/각 열을 검색하려면 이 검색이 필요합니까?
일부 파일의 길이는 5열 또는 9열일 수 있습니다. 예를 들어,
0.0.0.0:002921931:1111111:[email protected]
123.0.0.1:00029382:1111111:11111:[email protected]
($3 in a)를 ($0-$9 in a)로 변경하려고 시도했지만 작동하지 않는 것 같나요?
답변1
왜 필드를 하나씩 검색합니까? 한 번에 전체 행을 검색하면 어떨까요?
grep -f find.txt path_to_100_files/*
답변2
이메일이 100개 파일의 마지막 필드인 경우 다음을 사용하세요.
awk -F: 'NR==FNR{a[$1];next} ($NF in a)' find.txt path_to_100_files/*
각 필드를 살펴봐야 하는 경우 루프가 필요합니다.
awk -F: 'NR==FNR{a[$1];next} {for (i=1;i<=NF;i++) {if ($i in a) {print;break}}} find.txt path_to_100_files/*
그러나 더 간단한 호출은 grep을 사용하는 것입니다.
grep -oFf find.txt path_to_100_files/*
답변3
먼저 파일에 있는 최대 열을 찾고 다음 명령을 사용하여 최대값을 가져옵니다.
k=`awk -F ":" '{print NF}' path_to_100_files/* | sort -nr | head -1`
for 루프를 사용하여 각 열을 확인하세요.
for ((i=0;i<=$k;i++)); do awk -v i="$i" -F ":" 'NR==FNR {a[$1];next}($i in a) {print }’ find.txt path_to_100_files/* ; done