複数のファイルのn行目を別のファイルに効率的に転送する

複数のファイルのn行目を別のファイルに効率的に転送する

プロジェクトの場合は、大規模なデータセットを処理しなければならず(予想できなかった)問題に直面しました。

  • 約10,000個のファイル(10,000人の「患者」)があるフォルダがあり、各ファイルには約200万個の項目(測定値)が含まれています。

  • さらに分析するには、これらの患者間の各測定値を比較する必要があります。

それで、それぞれ10,000個のアイテムを含む200万のファイルを作成したいと思います。しかし、Bashを使用すると、基本的に次のアプローチではこれが実現可能ではないようです。

awk 'FNR==$1' $INPUTPATH > $OUTPUTPATH

そこにライン番号を入れて$11000個程度のコアに並列化をしました。

効率を高める方法はありますか?

答え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

関連情報