세 개의 파일을 연결하고(한 파일의 첫 번째 줄을 건너뛰고) 이를 내 프로그램에 입력으로 보내려면 어떻게 해야 합니까?

세 개의 파일을 연결하고(한 파일의 첫 번째 줄을 건너뛰고) 이를 내 프로그램에 입력으로 보내려면 어떻게 해야 합니까?

A, B, C 파일이 있습니다. 파일 A, B, C를 연결하고 싶습니다(C의 첫 번째 줄 건너뛰기). 그런 다음 myProgram에 입력으로 보냅니다. 이것을 쉘 스크립트로 어떻게 작성할 수 있습니까?

내가 쓴 것은

cat A > file
echo >> file     //want to start all contents in new line
cat B >> file
tail -n+2 C >> file
./myProgram < file 

하지만 파일을 생성하지 않고 연결하여 프로그램에 보내는 방법을 모르겠습니다.

답변1

이 시도:

{ cat A ; echo; cat B ; awk 'NR>1' C ; } | programm

그 안에 명령어를 넣어보세요큰 괄호그룹.

;개행 문자 없이 수행된 경우 필수는 아닙니다.그룹.

다른 건 필요 없어서브쉘여기;)

답변2

프로세스 교체 사용

./myProgram < <(cat A; echo ''; cat B; tail -n +2 C)

<(commands)FIFO 파일을 생성하고 프로그램으로 읽어 들입니다.

다음을 수행하여 이를 테스트할 수 있습니다.

$ echo <(cat A; echo ''; cat B; tail -n +2 C) /dev/fd/63

프로세스 대체는 명명된 파이프(FIFO) 또는 /dev/fd 명명된 파일 열기 방법을 지원하는 시스템에서 지원됩니다. <(목록) 또는 >(목록) 형식을 사용합니다. 프로세스 목록의 입력 또는 출력은 FIFO 또는 /dev/fd의 파일에 연결됩니다. 파일 이름은 확장 결과로 현재 명령에 인수로 전달됩니다. >(목록) 형식을 사용하는 경우 파일에 쓰면 목록에 대한 입력이 제공됩니다. <(목록) 형식을 사용하는 경우 목록의 출력을 얻으려면 인수로 전달된 파일을 읽어야 합니다. 가능한 경우 프로세스 대체는 매개변수 및 변수 확장, 명령 대체 및 산술 확장과 동시에 수행됩니다.

답변3

서브쉘을 사용하세요. 서브셸에서 명령을 실행하고 출력을 프로그램으로 파이프합니다.

(cat a; echo; cat b; tail -n+2 c) | ./myProgram

답변4

awk 메서드

awk 'ARGIND<3;ARGIND==3&&FNR>1' a b c | ./myProgram

관련 정보