awk - 生成包含 LINK1 元素的 MDF 有限元网格
问题描述
我在大学得到了以下作业:
编写一个 AWK 程序,该程序可以生成包含 LINK1 元素的 MDF 有限元网格。网格的几何形状包含 n 条垂直线和 m 条水平线。n 和 m 值是 AWK 程序的参数。线之间的垂直和水平距离也是参数。网格的形状如下图所示:
示例执行:
awk –v n=3 –v m=2 –v dn=2 –v dm=1 –f gen.awk > output.mdf
输入:
n
是垂直线的数量
m
是水平线的数量
dn
是垂直线之间的字符数
dm
是水平线之间的字符数
输出:
这output.mdf
是我需要在其中绘制这些线的测量数据格式文件。
像这样:
__|__|__|__
__|__|__|__
| | |
并且:
请确保 output.mdf 文件有效。可以使用 chkmdf.exe 或 e_plot32.exe 程序来检查 MDF 文件的有效性。
不要误会我的意思,我不想有人为我解决,我知道这个平台不是为了那个。我只要求一些入门技巧,文件
解决方案
您说您只是想要提示和提示,但生命太短,无法在此处提供 awk 教程,所以如果您使用-
而不是_
作为行分隔符而没有解释,这里是如何做到这一点:
$ cat gen.awk
BEGIN {
numCols = n + 1
colWidth = dn
numRows = m + 1
rowHeight = dm
colSep = "|"
rowSep = sprintf("%*s",colWidth,"")
gsub(/ /,"-",rowSep)
for (rowNr=1; rowNr<=numRows; rowNr++) {
for (subRowNr=1; subRowNr<=rowHeight; subRowNr++) {
for (colNr=1; colNr<=numCols; colNr++) {
printf "%*s%s", colWidth, "", (colNr<numCols ? colSep : ORS)
}
}
if ( rowNr < numRows ) {
for (colNr=1; colNr<=numCols; colNr++) {
printf "%s%s", rowSep, (colNr<numCols ? colSep : ORS)
}
}
}
}
.
$ awk -v n=3 -v m=2 -v dn=2 -v dm=1 -f gen.awk
| | |
--|--|--|--
| | |
--|--|--|--
| | |
.
$ awk -v n=5 -v m=4 -v dn=6 -v dm=3 -f gen.awk
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
你可以用谷歌搜索结构、添加print
s 等来弄清楚它在做什么,然后从中学习并修复它以输出你想要的确切格式。我还强烈建议您阅读 Arnold Robbins 所著的《Effective Awk Programming, 4th Edition》一书——所有其他有关 awk 的书籍都不完整和/或已过时和/或存在其他问题。
推荐阅读
- javascript - 如何避免 Next.js 动态路由中出现“id undefined”?
- keras - 从 YOLOv3 获取特征提取
- python-3.x - 命令引发异常:HTTPException:400 Bad Request(错误代码:50007):无法向该用户发送消息
- sql-server - EF Core 3.1 产生不正确的查询翻译
- c# - SQL命令中Try-Catch的不一致问题,用C#执行
- batch-file - 任何程序退出后如何在DOS中执行文件?
- git - 如果不使用 --dir-diff 选项,为什么 git difftool 不会在 macOS 上开始融合?
- java - 空气阻力在这个模拟中导致速度急剧上升
- visual-studio-2019 - -d.lib 和普通的 SFML-system.lib 有什么不同?
- javascript - 如何使用 javascript 在现有选项卡中添加 thead 和 tbody 标签