我在大学里得到了以下作业:
编写一个 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
Run Code Online (Sandbox Code Playgroud)
输入:
n 是垂直线的数量
m 是水平线的数量
dn 是垂直线之间的字符数
dm 是水平线之间的字符数
输出:
这output.mdf是我需要绘制这些线的测量数据格式文件。
像这样:
__|__|__|__
__|__|__|__
| | |
Run Code Online (Sandbox Code Playgroud)
并且:
请确保 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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
.
$ awk -v n=3 -v m=2 -v dn=2 -v dm=1 -f gen.awk
| | |
--|--|--|--
| | |
--|--|--|--
| | |
Run Code Online (Sandbox Code Playgroud)
.
$ awk -v n=5 -v m=4 -v dn=6 -v dm=3 -f gen.awk
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
Run Code Online (Sandbox Code Playgroud)
你可以用谷歌搜索结构,添加prints 等来弄清楚它在做什么,然后从中学习并修复它以输出你想要的确切格式。我还强烈建议您阅读 Arnold Robbins 所著的《有效的 awk 编程》,第 4 版——所有其他关于 awk 的书籍都不完整和/或过时和/或有其他问题。
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |