일반 지침:
나는 같은 문제에 여러 번 직면했고 단계별 스크립트로 해결했습니다. 하지만 파이프와 한 줄짜리 파이프가 있으면 내 삶이 더 편해질 것이라는 것을 알고 있습니다.
간단히:
command1 -flag target.file | command2 -flag
내가 이해하는 command2
바에 따르면 command1 -flag target.file
. 그러나 command2
끝에 추가해야 하는 추가 매개변수가 있습니다. 따라서 다음과 같이 읽을 수 있습니다.
command2 -flag OUTPUTOFCOMMAND1 argument2
파이프를 직접 사용하려고 하면 |
물론 출력을 두 번째 명령의 끝으로 파이프하기 때문에 원하는 명령을 얻지 못합니다. 파이프 출력을 두 번째 명령어의 특정 부분으로 리디렉션하고 싶습니다. 이 같은:
command1 -flag target.file | command2 -flag PIPEOUTPUT1HERE argument2
여기서 비슷한 질문을 찾았습니다.이전 명령의 출력을 다음 명령의 인수로 전달합니다., 하지만 저는 좀 더 일반적이고 간단한 방법을 원합니다. 내가 성공하지 못한 채 사용한 것처럼 :
command1 | xargs -I{} command2 {}
이것은 기본적으로 수행되는 작업 command2 $(command1)
이지만 전체 출력을 파이프로 연결하고 싶습니다. 단순한 것처럼ls | grep "something"
내 구체적인 사례:
dat 파일의 첫 번째 줄을 가져와서 11줄마다 나누고 싶습니다.
$ tail -n +2 ac_sweep_m+_-30.00mT.rx | xargs -I{} split -l 2 {}
그러나 두 번째 명령이 끝나면 이전 출력의 각 줄을 전달합니다.
"ac_sweep_m+_-30.00mT_"
split: cannot open '0.000000e+00 0.000363094 -0.000518363 -0.000389763 0 ' for reading: No such file or directory
split: cannot open '2.800000e-11 -0.0853443 -0.00230621 -0.000370474 0 ' for reading: No such file or directory
split: cannot open '6.700000e-11 -0.205325 -0.00375738 0.000241809 0 ' for reading: No such file or directory
파이프라인을 특정 위치로 정확히 연결하려면 어떻게 해야 합니까?
답변1
해결책은 생각보다 간단합니다.
이것을하기 위해:
command1 -flag target.file | command2 -flag PIPEOUTPUT1HERE argument2
나-
올바른 부팅 출력 에만 해당첫 번째 명령:
command1 -flag target.file | command2 -flag - argument2
나로서는, 아주 잘 작동합니다. dat 파일의 첫 번째 줄을 잘라내고 파일을 각각 21줄의 섹션으로 나눕니다.
$ tail -n +2 ac_sweep_m+_-30.00mT.rx | split -l 21 - "ac_sweep_m+_-30.00mT_"
$ ls
ac_sweep_m+_-30.00mT_aa ac_sweep_m+_-30.00mT_ae ac_sweep_m+_-30.00mT_ai ac_sweep_m+_-30.00mT_am ac_sweep_m+_-30.00mT_aq
ac_sweep_m+_-30.00mT_ab ac_sweep_m+_-30.00mT_af ac_sweep_m+_-30.00mT_aj ac_sweep_m+_-30.00mT_an ac_sweep_m+_-30.00mT_ar