我有大量数据要从文本文件中导入。这些文件已经预先格式化,以便我可以将每个列作为bash数组导入:
更新。这是我尝试过的内容:
问题在于,正如预期的那样,这会产生仅包含A链或B链的文件,而不是同时包含两者的文件。此外,它也没有产生“chain”和“hresname”数组的所有可能组合,它只是将“hresname”添加到仅有一个“chain”的文件中。
现在,我想从包含多行此类格式的文件中提取信息:2GYS chain=(A B) hresname=(BMA FUC NAG NDG) hresnumber=( ) hatom=( )
例如,我想提取所有第一列为ATOM且第五列与链数组匹配(在本例中,它将是A和B)的行。ATOM 1 N THR A 4 30.127 13.123 1.297 1.00 39.96 N
更新。这是我尝试过的内容:
for c in "${chain[@]}" ; do
awk -v pdbid="$pdbid" -v c="$c" '{ if($1 == "ATOM" && $5==c) { print $0 } }' ${pdbid}.pdb >> ../../properpdb/${pdbid}_${c}.pdb
done
for c in "${chain[@]}" ; do
for r in "${hresname[@]}" ; do
awk -v pdbid="$pdbid" -v c="$c" -v r="$r" '{ if($1 == "HETATM" && $5==c && $4==r) { print $0 } }' ${pdbid}.pdb >> ../../properpdb/${pdbid}_${c}.pdb
done
done
问题在于,正如预期的那样,这会产生仅包含A链或B链的文件,而不是同时包含两者的文件。此外,它也没有产生“chain”和“hresname”数组的所有可能组合,它只是将“hresname”添加到仅有一个“chain”的文件中。
$5==c
是什么意思?$5=c
将变量 'c' 的值赋给当前记录的第5列。更一般地说,为什么不在awk中构建一些代码来解析输入文件,并在可能的情况下更改输入文件的格式,以使其在awk中需要更少的解析。祝好运! - shellter