将多个 .gz 文件中的特定列粘贴在一起

发布于 2024-12-12 02:15:58 字数 221 浏览 0 评论 0原文

未压缩的具有相同的行数和相同的列数。

所有文件都位于同一目录中。

是否可以从每个文件中提取每 5-6 列并将它们粘贴在一起,而无需转储临时文件?

一样的东西

for i in *.gz
do
   gunzip -c $i |cut -f5-6 >$i.tmp;
done

paste *.tmp

像谢谢

that uncompressed have the same number of lines, and the same number of columns.

All files are located in the same dir.

Is it possible to pullout every 5-6 column from every file and paste them together without having to dump temp files?

Something like

for i in *.gz
do
   gunzip -c $i |cut -f5-6 >$i.tmp;
done

paste *.tmp

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

网白 2024-12-19 02:15:58

您可以创建一个命令行来评估和使用 bash 进程替换以避免临时文件:

command=paste
for i in *.gz; do
    command="$command <(gzip -cd $i | cut -f5-6)"
done
eval $command

You can create a command line to evaluate and use bash process substitution to avoid tempfiles:

command=paste
for i in *.gz; do
    command="$command <(gzip -cd $i | cut -f5-6)"
done
eval $command
左秋 2024-12-19 02:15:58
for f in *.gz ; do
  printf '_fn %s\n' "$f" 
  gunzip -c "$f"  
done | 
  awk 'END {
    for (i = 0; ++i <= m;)
      for (j = 0; ++j <= fc;)
        printf "%s", (d[j, i] (j < fc ? OFS : RS))    
    }
  $1 == "_fn" {
    fn = $2; fnr = x; ++fc
    next
    }
  { 
    d[fc, ++fnr] = $5 OFS $6
    fnr > m && m = fnr
    }' OFS='\t'
for f in *.gz ; do
  printf '_fn %s\n' "$f" 
  gunzip -c "$f"  
done | 
  awk 'END {
    for (i = 0; ++i <= m;)
      for (j = 0; ++j <= fc;)
        printf "%s", (d[j, i] (j < fc ? OFS : RS))    
    }
  $1 == "_fn" {
    fn = $2; fnr = x; ++fc
    next
    }
  { 
    d[fc, ++fnr] = $5 OFS $6
    fnr > m && m = fnr
    }' OFS='\t'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文