설정 : 내가 몇 백 파일, input0.dat
, input1.dat
같은 이름이 뭔가를 가지고bash는 : 청크 파일의 프로세스 목록
는 ..., input150.dat
, 나는 몇 가지 명령 cmd
를 (사용하여 처리해야하는 어떤 기본적으로 모든 파일의 내용을 병합합니다. cmd
는 모든 입력 파일 이름의 목록 첫 번째 옵션으로 다음 출력 파일 이름 및 소요 :
./cmd output.dat input1.dat input2.dat [...] input150.dat
문제 :
문제는 스크립트가 10 개 파일 정도 인한처럼 처리 할 수 있다는 것입니다 메모리 문제 (저를 비난하지 마십시오). 따라서, 대신
./cmd output.dat *dat
처럼 bash
와일드 카드 확장을 사용하는 나는 그 후 나는 임시 출력을 병합 할 수 있습니다
./cmd temp_output0.dat file0.dat file1.dat [...] file9.dat
[...]
./cmd temp_outputN.dat fileN0.dat fileN1.dat [...] fileN9.dat
같은 것을 할 필요가있다.
./cmd output.dat output0.dat [...] outputN.dat
어떻게 스크립트이 효율적으로 bash
에서합니까?
나는 성공했으나 시도하지 못했습니다.
for filename in `echo *dat | xargs -n 3`; do [...]; done
문제는 xargs
의 출력 선이 연결된 얻을 수 있기 때문에이 다시 한 번에 모든 파일을 처리하는 것입니다.
편집 :cmd
을 호출 할 때 첫 번째 명령 줄 인수로 출력 파일 이름을 지정해야합니다.
예! 그게 내가 찾고 있었던거야. 감사. – fuenfundachtzig
이것은 실제로 필요한 것보다 훨씬 복잡합니다. 임시 파일을 피할 수 있습니다.'xargs '를'while read'로 파이프하면됩니다. 백그라운드 처리가 좋을 수도 있지만, 작업량이 얼마나되는지 등에 따라 불필요하게 복잡한 작업을 수행 할 수도 있습니다. – tripleee