如何保存在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之前为该行做的那样?
答案 0 :(得分:0)
您可以尝试使用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]
}
}