我想在awk中循环遍历数组中的所有元素并打印出来。这些值来源于以下文件:
我尝试过这个:
Ala A Alanine
Arg R Arginine
Asn N Asparagine
Asp D Aspartic acid
Cys C Cysteine
Gln Q Glutamine
Glu E Glutamic acid
Gly G Glycine
His H Histidine
Ile I Isoleucine
Leu L Leucine
Lys K Lysine
Met M Methionine
Phe F Phenylalanine
Pro P Proline
Pyl O Pyrrolysine
Ser S Serine
Sec U Selenocysteine
Thr T Threonine
Trp W Tryptophan
Tyr Y Tyrosine
Val V Valine
Asx B Aspartic acid or Asparagine
Glx Z Glutamic acid or Glutamine
Xaa X Any amino acid
Xle J Leucine or Isoleucine
TERM TERM termination codon
我尝试过这个:
awk 'BEGIN{FS="\t";OFS="\t"}{if (FNR==NR) {codes[$1]=$2;} else{next}}END{for (key in codes);{print key,codes[key],length(codes)}}' $input1 $input2
输出始终为Cys C 27
,当我将codes[$1]=$2
替换为codes[$2]=$1
时,我得到M Met 27
。
如何让我的代码按顺序打印出所有值?我不明白为什么我的代码会有选择地仅打印一个元素,而我可以告诉数组长度应该是27。(为了使我的代码最小化,我已经省略了else{next}
内的代码 - 否则,我只想保留数组codes
中的所有元素,并保留else{***}
命令)
根据如何查看awk数组中的所有内容?,上面的语法应该可行。我在这里尝试了echo -e"1 2\n3 4\n5 6" | awk '{my_dict[$1] = $2};END {for(key in my_dict) print key " : " my_dict[key],": "length(my_dict)}'
,并且运行良好。
$input1
来构建一个 awk 数组。然后,我将在文件2中使用该数组来 gsub 一个字段。gsub(key, codes[key], $3)
。我的问题是数组codes
,它似乎不让我循环遍历其所有的27个元素。如果需要,我可以提供第二个文件/所有 AWK 代码的链接。 - KibetFS="\t"
。即使这样,你的代码仍然只能处理两列,而你的数据有三列。 - tripleeeFS="\t"
的原因是... - Kibet