使用 AWK 将 MDF 转换为 VTK
MDF to VTK Converting using AWK
我是初学者,如果之前已经介绍过,我很抱歉,但我似乎无法找到解决我的问题所需的确切内容。
我正在尝试编写一个 AWK "script",它可以将 MDF(网格定义文件)作为输入转换为(有效的)VTK 文件作为输出。
我有一个示例 MDF 文件,如下所示:
TITLE "1"
NMESHPOINTS 4
NNODES 4
NELEMENTS_TRIANG1 2
TIMESTEP 0.00001
NINTERNAL_TIMESTEPS 1000
NEXTERNAL_TIMESTEPS 100
DAMPING_FACTOR 0.01
MESHPOINT_COORDINATES
1 0.0 0.0 0.0
2 1.0 0.0 0.0
3 1.0 1.0 0.0
4 0.0 1.0 0.0
NODES_TRIANG1
1 1 2 3
2 1 3 4
我想从这个输入中创建一个有效的 VTK 文件。
输出应该是这样的:
# vtk DataFile Version 1.0
2D Unstructured Grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 4 float
0.0 0.0 0.0
1.0 0.0 0.0
1.0 1.0 0.0
0.0 1.0 0.0
CELLS 2 8
3 0 1 2
3 0 2 3
CELL_TYPES 2
5
5
我试着描绘一下映射的工作原理我希望它能解释其中的一些。
为了使这个特定示例更容易一点,假设我们只想使用三角形。
遗憾的是我也没有与 VTK 和 MDF 相同的文件,我尝试手动编写一个。
有什么办法可以用 AWK 做到这一点吗?
任何帮助将不胜感激!!
显示输入 -> 输出映射的优秀图表!让写这个变得非常容易:
$ cat tst.awk
~ /^[[:alpha:]]/ { f[] = }
!NF { block = "" }
== "MESHPOINT_COORDINATES" {
block =
print "# vtk DataFile Version 1.0"
print "2D Unstructured Grid"
print "ASCII"
print ""
print "DATASET UNSTRUCTURED_GRID"
printf "POINTS %d float\n", f["NMESHPOINTS"]
next
}
block == "MESHPOINT_COORDINATES" {
= ""
sub(/^[[:space:]]+/,"")
print
}
== "NODES_TRIANG1" {
block =
printf "\nCELLS %d %d\n", f["NELEMENTS_TRIANG1"], f["NELEMENTS_TRIANG1"] * 4
next
}
block == "NODES_TRIANG1" {
printf "%s", 3
for (i=2; i<=NF; i++) {
printf " %s", $i - 1
}
print ""
nlines++
}
END {
printf "\nCELL_TYPES %d\n", nlines
for (i=1; i<=nlines; i++) {
print 5
}
}
.
$ awk -f tst.awk file.mdf
# vtk DataFile Version 1.0
2D Unstructured Grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 4 float
0.0 0.0 0.0
1.0 0.0 0.0
1.0 1.0 0.0
0.0 1.0 0.0
CELLS 2 8
3 0 1 2
3 0 2 3
CELL_TYPES 2
5
5
通常我们只回答 post 用户首先尝试自己解决但您投入足够的精力创建示例和描述映射,恕我直言,您应该得到解决方案的帮助 - 请参阅上面,尝试自己弄清楚它是如何工作的(添加 "prints",查看手册页等),然后 post 如果您对此有任何具体问题,请提出一个新问题。
我是初学者,如果之前已经介绍过,我很抱歉,但我似乎无法找到解决我的问题所需的确切内容。 我正在尝试编写一个 AWK "script",它可以将 MDF(网格定义文件)作为输入转换为(有效的)VTK 文件作为输出。
我有一个示例 MDF 文件,如下所示:
TITLE "1"
NMESHPOINTS 4
NNODES 4
NELEMENTS_TRIANG1 2
TIMESTEP 0.00001
NINTERNAL_TIMESTEPS 1000
NEXTERNAL_TIMESTEPS 100
DAMPING_FACTOR 0.01
MESHPOINT_COORDINATES
1 0.0 0.0 0.0
2 1.0 0.0 0.0
3 1.0 1.0 0.0
4 0.0 1.0 0.0
NODES_TRIANG1
1 1 2 3
2 1 3 4
我想从这个输入中创建一个有效的 VTK 文件。 输出应该是这样的:
# vtk DataFile Version 1.0
2D Unstructured Grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 4 float
0.0 0.0 0.0
1.0 0.0 0.0
1.0 1.0 0.0
0.0 1.0 0.0
CELLS 2 8
3 0 1 2
3 0 2 3
CELL_TYPES 2
5
5
我试着描绘一下映射的工作原理我希望它能解释其中的一些。
为了使这个特定示例更容易一点,假设我们只想使用三角形。
遗憾的是我也没有与 VTK 和 MDF 相同的文件,我尝试手动编写一个。 有什么办法可以用 AWK 做到这一点吗? 任何帮助将不胜感激!!
显示输入 -> 输出映射的优秀图表!让写这个变得非常容易:
$ cat tst.awk
~ /^[[:alpha:]]/ { f[] = }
!NF { block = "" }
== "MESHPOINT_COORDINATES" {
block =
print "# vtk DataFile Version 1.0"
print "2D Unstructured Grid"
print "ASCII"
print ""
print "DATASET UNSTRUCTURED_GRID"
printf "POINTS %d float\n", f["NMESHPOINTS"]
next
}
block == "MESHPOINT_COORDINATES" {
= ""
sub(/^[[:space:]]+/,"")
print
}
== "NODES_TRIANG1" {
block =
printf "\nCELLS %d %d\n", f["NELEMENTS_TRIANG1"], f["NELEMENTS_TRIANG1"] * 4
next
}
block == "NODES_TRIANG1" {
printf "%s", 3
for (i=2; i<=NF; i++) {
printf " %s", $i - 1
}
print ""
nlines++
}
END {
printf "\nCELL_TYPES %d\n", nlines
for (i=1; i<=nlines; i++) {
print 5
}
}
.
$ awk -f tst.awk file.mdf
# vtk DataFile Version 1.0
2D Unstructured Grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 4 float
0.0 0.0 0.0
1.0 0.0 0.0
1.0 1.0 0.0
0.0 1.0 0.0
CELLS 2 8
3 0 1 2
3 0 2 3
CELL_TYPES 2
5
5
通常我们只回答 post 用户首先尝试自己解决但您投入足够的精力创建示例和描述映射,恕我直言,您应该得到解决方案的帮助 - 请参阅上面,尝试自己弄清楚它是如何工作的(添加 "prints",查看手册页等),然后 post 如果您对此有任何具体问题,请提出一个新问题。