stdout에 출력이 있는 경우 stdout 전에 조건부 헤더를 인쇄하는 방법

stdout에 출력이 있는 경우 stdout 전에 조건부 헤더를 인쇄하는 방법

디렉터리에서 파일 목록을 필터링하는 프로세스가 있습니다( find큐가 멈췄음을 표시하기 위해 특정 기간보다 오래된 파일이 있는지 확인). 아무것도 반환할 수도 있고 반환하지 않을 수도 있으며, 반환할 경우 우편으로 전달됩니다 cron.

bash이 출력을 파이프로 연결하는 프로그램이나 간단한 방법이 있는지 궁금합니다 .어느헤더 라인이 앞에 추가되어 이를 통해 출력됩니다(예: "대기열에 걸린 파일입니다").

답변1

sed 인라인 답변:

find ./files -mtime +90|sed '1s/^/Files stuck in queue:\n/'

답변2

bash요청한 대로 다른 메서드는 실제로 메서드를 제공하지 않으므로 다음과 같습니다 .

command | while IFS= read -r line; do
    (( i )) || { printf '%s\n' 'These are the files stuck in the queue:' ; (( i++ )) ; }
    printf '%s\n' "${line}"
done

사용된 모든 명령은 내부 명령입니다 bash.

출력 라인이 없으면 아무것도 인쇄되지 않습니다. 있는 경우 헤더 행이 인쇄되고 그 뒤에 출력이 표시됩니다 command.

답변3

입력 스트림을 처리하는 동안 상태를 유지하려는 경우 awk가 가장 좋은 도구인 경우가 많습니다.

이 경우 스트림을 처리하려고 하며 입력이 보이면 헤더를 작성하고 해당 헤더를 썼다는 기록을 작성합니다.

awk '!input_seen { print "header"; input_seen = 1 } 1'

변수가 input_seenfalse인 경우(정의되지 않은 경우 기본값은 false) 헤더를 인쇄하고 true(1)로 설정합니다. 마지막으로 1또 다른 규칙은 간략한 방법입니다. 현재 줄을 인쇄합니다. 1로 바꿀 수도 있습니다 { print }.

답변4

또는,

output=$(command)
[[ -n $output ]] && { echo "header"; echo "$output"; }

관련 정보