解析 gawk 目录中的文件列表并保存到新文件夹

解析 gawk 目录中的文件列表并保存到新文件夹

你好我有以下代码

for i in *.dssp ; do
   gawk 'BEGIN{ FIELDWIDTHS = "5 5 1 1 4 1 *"} $4 == "A" {s=s$6} END {print s}' | tr "[HGI]" "H" | tr "[BE]" "E" | tr "[TS ' ']" "C" 
done 

我能够通过使用一个特定的 .dssp 文件调用 shell 中的代码来成功执行,但是我有这些文件的目录,需要它循环遍历所有文件并保存输出,这是一堆字母( fasta 等)到一个新文件中,并带有从中提取的相应 id。我不知道从这里该去哪里

答案1

这里单独使用 awk:

gawk -v map='[GI]>H,B>E,[TS ]>C' '
BEGIN  { nrf=split(map, tmp, /[,>]/); FIELDWIDTHS="5 5 1 1 4 1 *" }

$4=="A"{ buf= buf $6 }

ENDFILE{
    for(i=1; i<=nrf; i+=2) gsub(tmp[i], tmp[i+1], buf);
    print buf >FILENAME".output"; close(FILENAME".output"); buf=""
}' ./*.dssp

在这里,我们将字符映射转换作为变量参数-v map='[GI]>H,B>E,[TS ]>C'传递给 awk(每个字符用逗号分隔;也用于提高每个映射组之间的可读性)。>

然后在 BEGIN{} 块内我们将来自的映射分开map变量放入临时数组tmp并将这些,>视为分隔符;我们还通过 FIELDWIDTHS (GNU awk) 定义了字段。

接下来我们检查第四个字段是否等于“A”字符,如果是,则将每行的第六个字段以附加模式缓冲到buff多变的。

在每个输入文件的末尾,我们处理 ENDFILE{} 块(GNU awk),这里我们循环遍历字符映射对,并将左侧字符替换为右侧字符buff多变的;之后我们打印更新的buff内容到与输入同名的输出文件,并添加后缀,如“fileName.output”。

相关内容