![일련의 숫자에서 누락된 내용을 나열하는 가장 간결한 스크립트는 무엇입니까? [복사]](https://linux55.com/image/85437/%EC%9D%BC%EB%A0%A8%EC%9D%98%20%EC%88%AB%EC%9E%90%EC%97%90%EC%84%9C%20%EB%88%84%EB%9D%BD%EB%90%9C%20%EB%82%B4%EC%9A%A9%EC%9D%84%20%EB%82%98%EC%97%B4%ED%95%98%EB%8A%94%20%EA%B0%80%EC%9E%A5%20%EA%B0%84%EA%B2%B0%ED%95%9C%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
예를 들어 콘텐츠가 있습니다.
001
002
004
008
010
라는 텍스트 파일에서 file
누락된 콘텐츠를 어떻게 추출할 수 있습니까 3 5 6 7 9
?
답변1
일방 awk
통행:
$ awk 'NR != $1 { for (i = prev + 1; i < $1; i++) {print i} } { prev = $1 + 1 }' file
3
5
6
7
9
더 명확하게 말하자면:
awk 'NR != $1 {
for (i = prev + 1; i < $1; i++) {
print i
}
}
{
prev = $1
}'
각 줄에 대해 줄 번호가 숫자와 일치하는지 확인하고 일치하지 않으면 prev
이전 숫자( )와 현재 숫자(포함되지 않음, 따라서 i = prev + 1
) 사이의 모든 숫자를 인쇄합니다.
답변2
내 접근 방식은 시작 및 끝 제한과 같은 두 개의 변수를 초기화하고 시작 제한을 파일 이름에 추가하고 무한 반복하고 시작 및 끝 제한을 비교하고 시작 번호가 파일 이름보다 크면 종료하므로 숫자의 크기를 제어하는 것입니다. 끝 번호를 확인하려면 파일 A 시작 제한이 존재하고 증가하는지 확인하세요.
StartNumber=$1
EndNumber=$2
while true; do
[ ${StartNumber} -gt ${EndNumber} ] && { exit 0 ; }
if [ ! -f ${FileName}_${StartNumber} ]; then
echo ${StartNumber}
fi
((StartNumber+=1))
done
귀하의 의견을 바탕으로 한 몇 가지 제안 사항은 다음과 같습니다.
- find 명령을 실행
find . -type f
하고 결과를 반복해 보세요. - 각 파일에 대해 위 명령으로 생성된 애플리케이션은
echo ${filename} | tr -dc 0-9
숫자를 가져오는 데에만 사용됩니다. - "yyyyddd"를 얻을 수 있으며 이를 시작 제한으로 사용하고 종료 제한으로 오늘 날짜와 비교할 수 있습니다.
답변3
샘플 파일을 사용한다고 가정하면 다음 명령이 실행됩니다.
join -a 1 -o 1.1 2.1 -e missed <(seq -f '%03g' $(tail -1 <(sort file))) file | grep missed
이 출력을 생성합니다
003 missed 005 missed 006 missed 007 missed 009 missed
그게 필요하다면 내가 설명을 해줄 수 있어