以下 Awk 脚本应打印输入文件中的所有字符串,但以“HETATM”开头并包含同一字符串“lig”或“lih”模式中某处的字符串以及从“结尾”。最后它应该在过滤文件的末尾添加“END”:
awk '!/^HETATM/ && /lig|lih |^END/; END {print "END"}' test.pdb >> ./processed.pdb
但实际上它删除了几乎所有生成空文件的行,末尾带有
END
,从而过滤了所有字符串。一个可能的解决方案:
awk '!/^HETATM.*(lig|lih)/ && !/^END/; END {print "END"}'
它能正常工作吗?
应在过滤后的文件末尾添加“END”
请记住,在 GNU 中,
AWK
END
在处理所有文件后触发,而不是 ENDFILE
,简单的示例让 file1.txt
、file2.txt
和 file3.txt
内容分别为 1
, 2
,3
然后
awk '{print}ENDFILE{print "endfile"}END{print "end"}' file1.txt file2.txt file3.txt
提供输出
1
endfile
2
endfile
3
endfile
end
如果您保证始终只有 1 个文件将被塞入您的 awk 命令,您可能会立即忽略此细节。
(在 GNU Awk 5.1.0 中测试)