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