замена индексов ассоциативных массивов их значениями с помощью awk или sed - PullRequest
0 голосов
/ 28 января 2020

Я хотел бы заменить значения столбца ref, используя пары значений ключа из id

cat id:

[1] a 8-23
[2] g 8-21
[3] d 8-13

cat ref:

a 1 2
b 3 4
c 5 3
d 1 2
e 3 1
f 1 2
g 2 3

желаемый вывод

8-23    1   2
b       3   4
c       5   3
8-13    1   2
e       3   1
f       1   2
8-21    2   3

Полагаю, лучше всего было бы использовать awk.

cat replace.awk

BEGIN { OFS="t" }

NR==FNR {
    a[$2]=$3; next
}

$1 in !{!a[@]} {

print $0
}

Не уверен, что мне нужно изменить?

1 Ответ

1 голос
/ 28 января 2020

$1 in !{!a[@]} не является синтаксисом awk. Вам просто нужно $1 in a:

BEGIN { OFS='\t' }

NR==FNR {
    a[$2] = $3
    next
}

{
    $1 = ($1 in a) ? a[$1] : $1
    print
}
  • для принудительного обновления OFS, эта версия всегда присваивается $1
  • print использует $0, если не указано
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...