Объединение двух файлов с использованием AWK при изменении первичного ключа - PullRequest
1 голос
/ 21 апреля 2020

Я новичок, поэтому извиняюсь, если это уже было рассмотрено, но я не могу найти именно то, что мне нужно для решения этой проблемы.

Я пытаюсь объединить два файла с несколькими данными и редактирование первичного ключа в процессе с помощью 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.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_COORDINATES и NODES_TRIANG1 - это индекс узла, который работает как первичный ключ, поэтому его нельзя умножить.

Есть ли способ сделать это с помощью AWK?

1 Ответ

1 голос
/ 21 апреля 2020

Вот мое решение:

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

Вы можете вставить его в файл и упростить его чтение. Задавайте вопросы, если что-то неясно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...