파일을 동일한 크기의 파일로 분할하고 이 파일을 병렬로 실행되어야 하는 쉘 스크립트에 대한 입력으로 사용합니다.

파일을 동일한 크기의 파일로 분할하고 이 파일을 병렬로 실행되어야 하는 쉘 스크립트에 대한 입력으로 사용합니다.

10000개의 레코드가 포함된 파일을 동일한 레코드 크기의 여러 파일로 분할하고 싶습니다. 이러한 새 파일은 쉘 스크립트에 대한 입력으로 필요합니다. 쉘 스크립트는 각 파일에 대해 병렬로 실행되어야 합니다. 여기서 루프를 사용할 수 있나요?

답변1

데이터 파일이 호출 data.txt되고 실행하려는 스크립트가 호출된다고 가정합니다 script.sh. 그런 다음 다음과 같이 할 수 있습니다.

#!/bin/bash

# Create a temporary directory
splitdir="$(mktemp -d)"

# Splite the data-file into files of 1000 lines each
split --lines=1000 -d --suffix-length=3 data.txt "${splitdir}/chunk"

# Run your script on each data file separately
for chunk in "${splitdir}/"*; do nohup script.sh "${chunk}" &; done

다음과 같은 것을 사용할 수도 있습니다.매개변수또는GNU 병렬Bash 루프 대신.

관련 정보