프로젝트의 경우 대규모 데이터 세트를 처리해야 했고 (예상하지 못했던) 문제에 직면했습니다.
약 10,000개의 파일(10,000명의 "환자")이 있는 폴더가 있는데 각 파일에는 약 200만 개의 항목(측정값)이 포함되어 있습니다.
추가 분석을 위해서는 이들 환자 간의 각 측정값을 비교해야 합니다.
그래서 각각 10,000개의 항목이 포함된 2백만 개의 파일을 만들고 싶습니다. 그러나 Bash를 사용하면 기본적으로 다음과 같은 접근 방식으로는 이것이 실현 가능하지 않은 것 같습니다.
awk 'FNR==$1' $INPUTPATH > $OUTPUTPATH
거기에 라인 번호를 넣어서 $1
1000개 정도의 코어에 병렬화를 했습니다.
효율성을 높일 수 있는 방법이 있나요?
답변1
awk 'FNR==$1' $INPUTPATH > $OUTPUTPATH
여기서 문제는앗매칭 후 파일을 계속해서 읽어보세요. 당신이 사용하는 경우sed대신 파일 읽기를 쉽게 중지할 수 있습니다.
예를 들어. F1이라는 파일에서 1000번째 줄을 사용하려는 경우sed
/usr/bin/sed -n -e '1000p' -e '1000q' F1
다음은 문제를 해결할 것이라고 생각되는 쉘 스크립트입니다.
for AFILE in "$INPUTPATH"
do
POS=1
while read -r ALINE
do
echo "$ALINE" >> "$OUTPUTPATH"/$POS
POS=$((POS+1))
done
done