【问题标题】:bash awk saving what is being outputted to a arraybash awk 保存输出到数组的内容
【发布时间】:2014-03-28 17:58:56
【问题描述】:

如何保存在 awk 语句中打印出来的数据?能够访问变量或数组?它经过的每个文件以及所有文件的总和都有 4 个值 (GATC)。如果找到符合标准的文件,它会迭代并打印每一行,并添加它找到的每行的数量,总共四个。不过,我需要稍后才能访问这些信息。虽然它找到的不一定是线条,但我不需要。如何保存到我认为是最好的方法的数组中?

for f in $FILES
do
      [ -d "$f" ] && continue

      if is_file_contains_DNA $f; then
          echo "DNA exist in " $f  >> $SUMMARYPATH
      #touch $OUTFILENAME$f
      awk '/^ATOM/&&substr($0,20,1)~/[GATC]/{print;l++;a[substr($0,20,1)]++}END{printf "total line : %s\n",l;for (i in a) printf "%s : %s \n",i,a[i]}' $f >> $RESULTSPATH$OUTFILENAME$f
      else
          echo "DNA DOES NOT exist in "$f >> $SUMMARYPATH
      fi

done

补充一点:

可能有更简单的解决方案。我可以使用“awk”而不是一个打印出两个文件吗?所以我想打印我现在拥有的结果文件,然后添加到单个“SUMMARY”文件中,就像我为 awk 之前的行所做的那样?

【问题讨论】:

  • array=($(awk command))?
  • 我不想要每一行完整的数据,如果这有意义的话,只是标准的迭代计数器?它正在寻找 GATC 和每次命中,我想添加到计数器并跟踪它以及我想添加到数组列表中的每个文件。因此,第一个数组 [1] 将包含每个 GATC 的总数以及所有这些的总数...第二个数组 [2] 将包含文件 2,依此类推...

标签: arrays bash awk


【解决方案1】:

您可以尝试使用 awk 中的文件描述符将一些内容输出到终端并在 bash 数组中捕获其他数据。比如

#! /bin/bash

exec 6>&1

files=(file1 file2)
res=()
numfiles=${#files[@]}

for (( i=0; i<$numfiles; i++)) ; do
    res[$i]=$(awk -f a.awk "${files[$i]}")
done

exec 6>&-

将打开一个编号为 6 的新文件描述符,该描述符将在 awk 中可用,因此 awk 脚本 a.awk 可以是:

/^ATOM/ && substr($0,20,1)~/[GATC]/ {
    print > "/dev/fd/6"
    l++
    a[substr($0,20,1)]++
}
END {
    printf ("total line : %s\n",l) > "/dev/fd/6"
    printf "%s ", l
    for (i in a) {
        printf ("%s : %s \n",i,a[i]) > "/dev/fd/6"
        printf "%s ",a[i]
    }
}

【讨论】:

  • 这看起来是一个可能的解决方案。我无法理解如何在每个循环中合并迭代?我之前使用“for”循环,使用 $f 作为迭代器。可能有更简单的解决方案。我可以使用“awk”而不是一个打印出两个文件吗?所以我想打印我现在拥有的结果文件,然后添加到单个“SUMMARY”文件中。我更新了我的问题并添加了大部分代码。
  • @MAXGEN 只需要在命令行的awk中输入摘要文件名,就可以写入两个文件。喜欢:awk -vsfile="$SUMMARYPATH" '/^ATOM/ .. ' $f &gt;&gt; $RESULTSPATH$OUTFILENAME$f。在 awk 脚本中,只需使用 print "xx" &gt;&gt; sfile
猜你喜欢
  • 2011-05-02
  • 2013-02-12
  • 2020-01-17
  • 2016-04-17
  • 2012-08-14
  • 2020-01-15
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多