#!/bin/bash
while read file1 <&3; do
while read file2 ; do
if [ $file1 == $file2 ] ; then
$file1 >> /infanass/dev/admin/test/newlist.txt
fi
echo "$file1"
echo "$file2"
done 3</infanass/dev/admin/test/file2.txt
done 3</infanass/dev/admin/test/file1.txt
file1.txt에서 한 줄을 읽은 다음 file2.txt를 반복하여 일치하는 항목이 있는지 확인하고 이를 새 텍스트 파일에 쓰고 싶습니다.
무한루프가 있는 것 같아요..
답변1
더 쉬운 방법은 어떻습니까?
while read line do
grep "^$line$" file2.txt >>matches.txt
done < file1.txt
설명하다:
이는 행을 반복 하며 그 안의 정확한 행을 찾는 file1.txt
데 사용됩니다 . 행이 일치할 수 있으면 이제 해당 행이 다시 출력된 다음 파일로 리디렉션(추가) 됩니다 .grep
file2.txt
grep
file2.txt
matches.txt
스크립트가 멈춘 이유는 두 번째 루프가 입력을 기다리고 있기 때문입니다 . 첫 번째 루프에서 했던 것처럼 파일 설명자로 복사하는 stdin
것을 잊어버렸습니다 . 어떤 경우에도 추가 파일 설명자를 만들 필요가 없습니다. 루프가 터미널 대신 파일에서 읽도록 리디렉션 하기만 하면 됩니다.stdin
3
stdin
while
답변2
답변3
더 간단하게 먹이를 주는 것으로 해보는 것은 어떨까요?파일 1grep에 대한 검색어로 사용하여 검색하도록 합니다.파일 2?
$ grep -f file1 file2 > file3
일부 플랫폼에서는 성능 문제로 인해 egrep 또는 ggrep이 필요하거나 필요하다는 점에 유의하세요.