как бороться с двумя файлами пересечений с помощью awk - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть два файла.каждый файл имеет уникальное job_id значение.

shop_file.txt Этот файл, значение job_id всегда равно 21.

407486;{"shop_id":"407486","job_id":21}
163181148;{"shop_id":"163181148","job_id":21}
1510942977;{"shop_id":"1510942977","job_id":21}

dish_file.txt Этот файл, значение job_id всегда равно23.

7491777303;{"shop_id":"407486","dish_id":"7491777303","job_id":23}
1667364700;{"shop_id":"1664150969","dish_id":"1667364700","job_id":23}
1932540486;{"shop_id":"1932534033","dish_id":"1932540486","job_id":23}
1932540468;{"shop_id":"1932534033","dish_id":"1932540468","job_id":23}
1932540477;{"shop_id":"1932534033","dish_id":"1932540477","job_id":23}
1932540456;{"shop_id":"1932534033","dish_id":"1932540456","job_id":23}
1673778516;{"shop_id":"1478428493","dish_id":"1673778516","job_id":23}
1673462967;{"shop_id":"1642179256","dish_id":"1673462967","job_id":23}
1721592562;{"shop_id":"1697153440","dish_id":"1721592562","job_id":23}
8491777303;{"shop_id":"407486","dish_id":"8491777303","job_id":23}

одинаковое shop_id значение должно существовать два файла, как использовать awk получить этот результат.

7491777303;{"shop_id":"407486","dish_id":"7491777303","job_id":23}
8491777303;{"shop_id":"407486","dish_id":"8491777303","job_id":23}

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

В идеале данные JSON должны анализироваться как таковые, но при условии, что структура является фиксированной и непротиворечивой, как показано (важно, что shop_id является первым ключом и никогда не имеет запятых в своем значении):

$ awk -F'[;,]' 'NR==FNR {a[$2]; next} $2 in a' shop_file.txt dish_file.txt
7491777303;{"shop_id":"407486","dish_id":"7491777303","job_id":23}
8491777303;{"shop_id":"407486","dish_id":"8491777303","job_id":23}
0 голосов
/ 22 февраля 2019

Ниже grep и sed один вкладыш должен помочь для данного примера:

grep -f <(sed 's/.*\("shop_id"[^,]*\).*/\1/ shopFile) dishFile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...