首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将循环迭代存储在内存中

将循环迭代存储在内存中
EN

Stack Overflow用户
提问于 2015-07-16 08:19:29
回答 1查看 34关注 0票数 1

我正在编写一个简单的bash脚本来对>10000个文件进行递归粘贴,每个文件有两列。

这些文件如下所示:

代码语言:javascript
复制
A1BG 3
A1CF 3
A2M 3
A4GALT 5
AAAS 2
AACS 2
AADAT 2
AAGAB 4
AAK1 3
AAMP 2
AANAT 3
AARS 2
AARS2 3
AARSD1 2
...

密码是:

代码语言:javascript
复制
SPHERE=Sphere.matrix.txt
rm -rf $SPHERE
for i in `ls *.spheres | sort`; do
    if [ -f $SPHERE ]; then
        cut -f2 $i \
        | paste $SPHERE - > $SPHERE.tmp
        mv $SPHERE.tmp $SPHERE
    else
        cat $i > $SPHERE
    fi
done

它打开第一个文件并将其写入输出文件。然后打开第二个文件,它接受第二个列,并将其粘贴到输出文件,等等.

代码的工作效率很高,但速度慢得多,因为在每一个循环中,它都必须打开和覆盖一个更大的文件。

如果我能够将aech迭代的结果存储在内存中而不是磁盘中,我认为性能会更快。

你能给我一些指导吗?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-16 08:48:06

如果我理解正确,而且所有文件都有相同的行数,那么您可以使用gnu awk获取每个文件的第2行,但第一行文件除外,可以一次一次构建输出文件:

代码语言:javascript
复制
awk 'FNR==NR {
  printf "%s",$0;
  for(i = 2;i<ARGC;i++){
    f = ARGV[i];
    getline <f
    printf " %s",$2
  }
  printf "\n"
}
FNR!=NR{ exit }
' `ls *.spheres | sort` > $SPHERE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31448905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档