연결된 파이프를 사용한 부분 리디렉션

연결된 파이프를 사용한 부분 리디렉션

원격지에는 계속 바뀌는 자동 생성 파일이 있는데, 나는 ssh user@ip cat luckyNumbers그것을 통해서만 원격지 파일을 볼 수 있고, 오늘의 행운의 숫자를 알려주고, 비밀 암호화된 메시지를 전달해준다.

Today's lucky number are 
1 2 3 
asdsa@!#SAxAaas 21gv3sad ASD@!#

내 목표는

  • 행운의 숫자를 1 2 3Luckynumbers.txt로 리디렉션한 다음
  • 나머지 파일을 내 프로그램에 파이프하세요.decoder
  • 전체 파일을 저장하거나 파일에 대한 두 번째 요청을 하지 않고 이 작업을 수행하고 싶습니다.

이렇게 데이터 스트림을 분할하는 것이 가능한지 잘 모르겠습니다.

답변1

다음은 다른 모든 라인을 stdout으로 보내는 동안 stdin의 라인 2를 특정 파일에 쓰는 여러 가지 방법입니다.

sed를 사용하세요:

ssh remotehost cat luckynumbers |
sed -e '2 { w luckynumbers.txt
            d
          }' |
decoder

awk를 사용하세요:

ssh remotehost cat luckynumbers |
awk 'NR == 2 { print > "luckynumbers.txt" }
     NR != 2 { print }' |
decoder

입력의 마지막 줄이 줄 바꿈으로 끝나지 않으면 awk가 줄 바꿈을 추가할 수 있습니다.

답변2

cat luckynumber | tail -q -n 2 | head -q -n 1 > luckynumbers.txt && cat luckynumber | tail -w -n 1 | decoder
  • 다음을 얻을 것이다행운의 숫자
  • 조용히 (소스 파일을 인용하지 않고) 마지막 두 줄을 꺼내십시오.
  • 마지막 줄에서 두 번째 줄을 다음으로 보냅니다.행운의숫자.txt
  • 콘텐츠 픽업행운의 숫자다시
  • 마지막 행만 빠르게 제거
  • 그리고 그것을 파이프로디코더

나는 그것이 파일에 대해 두 번째 요청을 한다는 것을 알고 있으며 대체 파일이 두 번째 요청을 하지 않도록 이를 개선하려고 노력할 것입니다(아마도), 그러나 지금은 이것이 내가 가지고 있는 것입니다.

관련 정보