Bash 스크립트에서 변수 파일 이름으로 파일 호출

Bash 스크립트에서 변수 파일 이름으로 파일 호출

1과 2의 많은 문자열을 포함하는 A라는 소스 파일이 있고 그 내용이 주기적으로 자동으로 변경되고(1과 2의 새 문자열이 추가됨) 이 파일에 대해 grep을 수행하여 "1"을 변경한다고 가정합니다. 문자열은 다음과 같습니다. B.라는 다른 파일로 추출되었습니다.

grep '1' A > B

이제 다음 grep 작업은 A의 내용을 B로 grep할 뿐만 아니라 새 문자열(및 새 문자열만)을 다른 파일로 추출하기 위해 B와 A를 비교해야 합니다. 이것은 반복되어야 합니다. 이를 위해 A의 업데이트된 내용이 포함된 "1" 문자열을 사용하여 새 파일 C를 만들고 이를 B와 비교한 다음 D라는 새 파일에 차이점을 추출합니다.

grep '1' A > B
sleep 60
while true; do
grep '1' A > C
grep -v -F -x -f B C > D
sleep 60
done &

문제는 B가 A의 오래된 grep이기 때문에 작동하지 않는다는 것입니다. 따라서 다음에 C를 실행할 때 업데이트되지 않은 이전 B와만 비교됩니다. 또한 D는 매번 덮어쓰게 됩니다.

매번 마지막 B의 복사본을 유지하도록 스크립트에 지시할 수 있어야 하므로 A는 항상 이전 버전과 비교되고 C는 항상 현재 A와 이전 마지막 B 간의 차이를 표시합니다. 이전 버전의 C를 다른 곳에 복사하기 때문에 유지할 필요가 없습니다.

변수 파일 이름을 사용해야 한다고 생각하고 B 및 C 파일 이름에 $(date) 변수를 추가하려고 시도했지만 grep이 이를 인식하지 못했기 때문에 작동하지 않은 것 같습니다(각 실행 스크립트 간에 날짜가 변경되기 때문). .

추신: 새로운 내용만 고려되도록 각 실행 사이에 A의 내용을 삭제하여 변수 이름과 두 번째 grep 작업이 필요하지 않도록 하는 해결 방법을 찾았습니다. 나는 여전히 bash 스크립트에서 변수 파일 이름을 호출하는 방법을 배우고 싶습니다.

PS2: 저는 휴대폰으로 글을 쓰고 있어서 bash 스크립트를 올바르게 코딩하는 방법을 모릅니다.

답변1

단순히 B를 교체하면 어떨까요?

grep '1' A > B
sleep 60
while true; do
grep '1' A > C
grep -v -F -x -f B C > D
cat C >> B   ####
sleep 60
done &

이렇게 하면 D1의 마지막 60초만 얻을 수 있습니다 A.

관련 정보