Как объединить два файла на основе одного столбца в AWK (с использованием подстановочных знаков) - PullRequest
0 голосов
/ 04 октября 2018

У меня есть 2 файла, и мне нужно сравнить столбец 2 из файла 2 с столбцом 3 из файла 1.

Файл 1

"testserver1","testserver1.domain.net","-1.1.1.1-10.10.10.10-"
"testserver2","testserver2.domain.net","-2.2.2.2-20.20.20.20-200.200.200.200-"
"testserver3","testserver3.domain.net","-3.3.3.3-"

Файл 2

"windows","10.10.10.10","datacenter1"
"linux","2.2.2.2","datacenter2"
"aix","4.4.4.4","datacenter2"

Ожидаемый результат

"testserver1","testserver1.domain.net","windows","10.10.10.10","datacenter1"
"testserver2","testserver2.domain.net","linux","2.2.2.2","datacenter2"

Все, что мне удалось найти операторы, которые работают, только если столбцы идентичны, мне нужно, чтобы он работал, если столбец 3 из файла 1 содержит значение из столбца 2 из файла 2

Я пробовал это, но опять же, это работает, только если столбцы идентичны (что я не хочу):

awk 'BEGIN {FS = OFS = ","};NR == FNR{f[$3] = $1","$2;next};$2 in f {print f[$2],$0}' file1.csv file2.csv

1 Ответ

0 голосов
/ 04 октября 2018

hacky!

$ awk -F'","' 'NR==FNR {n=split($NF,x,"-"); for(i=2;i<n;i++) a[x[i]]=$1 FS $2; next} 
               $2 in a {print a[$2] "\"," $0}' file1 file2

"testserver1","testserver1.domain.net","windows","10.10.10.10","datacenter1"
"testserver2","testserver2.domain.net","linux","2.2.2.2","datacenter2"

предполагает, что поиск уникален, т.е. записи file1 являются взаимоисключающими в этом поле.

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