在更改主键时使用AWK合并两个文件
我是一个初学者,所以很抱歉,如果这已经涵盖之前,但我似乎无法找到确切的我需要解决这个问题 我正在尝试合并两个包含多个数据的文件,并在使用AWK的过程中编辑主键在更改主键时使用AWK合并两个文件,awk,Awk,我是一个初学者,所以很抱歉,如果这已经涵盖之前,但我似乎无法找到确切的我需要解决这个问题 我正在尝试合并两个包含多个数据的文件,并在使用AWK的过程中编辑主键 $ awk –f convert.awk File1 File2 > output 文件1: # node index, x-coord, y-coord, z-coord MESHPOINT_COORDINATES 1 0.40157080 0.01165580 0.00000000 2 5.33646366 -2.00
$ awk –f convert.awk File1 File2 > output
文件1:
# node index, x-coord, y-coord, z-coord
MESHPOINT_COORDINATES
1 0.40157080 0.01165580 0.00000000
2 5.33646366 -2.00531643 0.00000000
3 4.16797174 2.29403052 0.00000000
4 5.41856053 1.77526867 0.00000000
5 4.29752634 6.05020186 0.00000000
6 5.54741904 5.46307875 0.00000000
7 5.13640734 9.99623421 0.00000000
8 -4.66339121 2.00580631 0.00000000
9 -0.83190475 4.30646155 0.00000000
10 -2.08191023 4.82606149 0.00000000
NODES_TRIANG1
1 188 28 27
2 259 71 11
3 31 4 30
4 45 6 44
5 396 40 39
6 277 227 241
7 194 113 112
8 249 125 124
9 168 114 113
10 144 19 18
文件2:
# node index, x-coord, y-coord, z-coord
MESHPOINT_COORDINATES
1 9.81601843 1.04888344 0.0
2 8.31348347 0.78329398 0.0
3 8.33745723 1.45922849 0.0
4 8.37867147 1.40693006 0.0
5 8.37033787 0.88985348 0.0
NODES_TRIANG1
1 2048 2041 1964
2 381 1072 64
3 381 380 1072
4 234 394 393
5 1978 1739 1753
期望输出:
MESHPOINT_COORDINATES
1 0.40157080 0.01165580 0.00000000
2 5.33646366 -2.00531643 0.00000000
3 4.16797174 2.29403052 0.00000000
4 5.41856053 1.77526867 0.00000000
5 4.29752634 6.05020186 0.00000000
6 5.54741904 5.46307875 0.00000000
7 5.13640734 9.99623421 0.00000000
8 -4.66339121 2.00580631 0.00000000
9 -0.83190475 4.30646155 0.00000000
10 -2.08191023 4.82606149 0.00000000
11 9.81601843 1.04888344 0.0
12 8.31348347 0.78329398 0.0
13 8.33745723 1.45922849 0.0
14 8.37867147 1.40693006 0.0
15 8.37033787 0.88985348 0.0
NODES_TRIANG1
1 188 28 27
2 259 71 11
3 31 4 30
4 45 6 44
5 396 40 39
6 277 227 241
7 194 113 112
8 249 125 124
9 168 114 113
10 144 19 18
11 2048 2041 1964
12 381 1072 64
13 381 380 1072
14 234 394 393
15 1978 1739 1753
MESHPOINT_坐标和NODES_Triange1中的第一个数据是节点索引,它作为主键工作,因此不能相乘
使用AWK有什么方法可以做到这一点吗?以下是我的解决方案:
awk '
BEGIN{m="MESHPOINT_COORDINATES"; n="NODES_TRIANG1"}
$1!="#" && NF>0 {
if ($1==m) {status=1; next};
if ($1==n) {status=2; next};
if (status==1) {i1++; t1[i1]=$2" "$3" "$4};
if (status==2) {i2++; t2[i2]=$2" "$3" "$4}
}
END{
print m; for (i=1; i<=i1; i++) print i, t1[i]; print "";
print n; for (i=1; i<=i2; i++) print i, t2[i]
}' File1 File2
awk'
开始{m=“网格点坐标”;n=“节点三角1”}
$1!=“#”&&NF>0{
如果($1==m){status=1;next};
如果($1==n){status=2;next};
如果(状态==1){i1++;t1[i1]=$2”“$3”“$4};
如果(状态==2){i2++;t2[i2]=$2”“$3”“$4}
}
结束{
打印m;用于(i=1;我会的,特别感谢您的努力和示例,请继续。对于示例,请您删除…
,以便澄清,只需以文本形式发布简单示例并让我们知道。感谢您的回答,我将其编辑到文件的前10行和前5行。我有点困惑。您还希望我们更新节点吗在三角形中还是仅在三角形编号中?如果你将两个文件与两个网格合并,那么你还需要更新用于构建三角形的垂直编号。谢谢你的问题,对不起,我回答得有点晚。是的,我也需要更新它们。我自己做到了,我不想让你们为我做所有的工作。我感谢您的帮助。感谢您解决了我的问题。它工作得非常完美,我自己要花很长时间才能解决。也许您可以在您的一行代码中添加一些新行,以便于阅读,或者只是将其作为脚本编写?