有效地将多个文件的第 n 行转移到另一个文件

有效地将多个文件的第 n 行转移到另一个文件

对于一个项目,我必须处理大型数据集并遇到一个问题(我没有预料到)。

  • 我有一个包含约 10000 个文件(10000 个“患者”)的文件夹,每个文件包含约 200 万个条目(测量值)。

  • 为了进一步分析,我需要对这些患者之间的每项测量结果进行比较。

因此,我想制作 200 万个文件,每个文件有 10000 个条目。然而,使用 Bash,这对于我的方法来说似乎是不可行的,基本上是:

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

我在其中输入行号$1并在大约 1000 个核心上并行化它。

有什么办法可以提高效率吗?

答案1

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

这里的问题是awk匹配后继续读取文件。如果你使用sed相反,您可以轻松停止读取文件。

例如。如果您(仅)想要使用名为 F1 的文件中的第 1000 行sed

/usr/bin/sed -n -e '1000p' -e '1000q' F1

这是一个 shell 脚本,我认为它可以解决您的问题:

for AFILE in "$INPUTPATH"
do
  POS=1
  while read -r ALINE
  do
    echo "$ALINE" >> "$OUTPUTPATH"/$POS
    POS=$((POS+1))
  done
done

相关内容