컬 요청의 출력을 2개의 개별 명령으로 보내는 방법

컬 요청의 출력을 2개의 개별 명령으로 보내는 방법

일부 데이터를 추출할 수 있도록 컬 요청의 출력을 gawk로 파이프하고 있습니다. 컬 요청으로 생성된 html 파일을 검색하는 경우 gawk 코드가 이미 작동합니다. 그러나 날짜 변수를 2개만 할당하면 되므로 간단한 내부 편집을 원합니다. 티 사용과 공정교체를 고민해봤습니다. gawk 및 명령 대체를 사용하여 2개의 서로 다른 변수가 할당되도록 컬 요청의 출력을 분기하는 방법이 있습니까?

여기에 내 코드 조각이 있습니다. 컬 요청의 전체 세부정보를 숨겼지만 가장 오래된 시퀀스, 날짜, 최신 시퀀스, 날짜가 별도의 줄에 포함된 HTML 보고서가 표시됩니다. gawk는 데이터에 대해 테스트되었습니다.

curl -k -q "https://user:password@ipaddress/report" 

위 명령의 출력을 아래 두 명령으로 파이프하거나 전송하고 싶습니다.

date1="$(date -d $(gawk '/Newest Sequence/ {print $3,$4}') +%s)"
date2="$(date -d $(gawk '/Oldest Sequence/ {print $3,$4}') +%s)" 

파일을 생성하지 않고도 이를 달성할 수 있습니까? 요청을 자주 실행하고 결과를 소켓으로 보낼 것이며 가능하면 불필요한 파일을 피하고 싶습니다.

답변1

필요한 기본 구문은 다음과 같습니다.

read date1 date2 < <( curl ... | gawk '...' )

이렇게 하면 awk다음과 같이 하나의 인스턴스만 필요합니다(초 변환을 추가하지 않고 아래 참조).

read date1 date2 < <( curl ... |
    awk '
      /Newest Sequence/ { new=$3" "$4 }
      /Oldest Sequence/ { old=$3" "$4 }
      END { print new, old }
      '
    )

(HTML 파일의 날짜 순서가 고정되어 있는 경우 날짜 정보를 즉시 인쇄하여 단순화할 수 있습니다.)

gawk필요한 시간 함수 도 있으므로 date기본 코드는 더 이상 사용되지 않게 됩니다. 제가 보여준 코드에서는 mktime()awk에 대한 호출을 추가하거나 (타이밍 기능을 피하기 위해) gawk다음과 같이 변수를 수정하여 셸 수준에서 변환을 수행해야 합니다.date

date1=$(date -d "${date1}" +%s)
date2=$(date -d "${date2}" +%s)

관련 정보