プロジェクトの場合は、大規模なデータセットを処理しなければならず(予想できなかった)問題に直面しました。
約10,000個のファイル(10,000人の「患者」)があるフォルダがあり、各ファイルには約200万個の項目(測定値)が含まれています。
さらに分析するには、これらの患者間の各測定値を比較する必要があります。
それで、それぞれ10,000個のアイテムを含む200万のファイルを作成したいと思います。しかし、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