сценарий оболочки для сопоставления столбца и добавления новых столбцов в таблицу из файла - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь написать скрипт оболочки для сравнения двух отдельных файлов и добавить информацию о x / y / objectID / Status / Data в первый файл, когда адреса и LocationID совпадают.Вот как выглядят мои файлы:

FileA.csv:

MAC     LocationID     Node_ID     Street     City     State     Zip_Code
ABC123  182            AB12        25_Main_St Hanover  WZ        12345
CDE123  128            CD12        35_Main_St Hooray   TZ        23456
EFG123  812            EF12        45_Main_St Hello    WA        45678

FileB.csv

objectid  Status  Data   X        Y       LocationID     Node_ID     Street     City     State     Zip_Code
555       RRR     sss    123456   123444  182            AB12        25_Main_St Hanover  WZ        12345
666       GGG     ttt    234567    87978  128            CD12        35_Main_St Hooray   TZ        23456
777       RRR     uuu    54321     98765  812            EF12        45_Main_St Hello    WA        45678

Мне не удается найти что-либо подобное в качестве примерадля сценариев оболочки Linux.У кого-нибудь есть предлагаемый способ объединения этих двух файлов?Результат будет выглядеть следующим образом:

MAC       objectid  Status  Data   X        Y       LocationID     Node_ID     Street     City     State     Zip_Code
ABC123    555       RRR     sss    123456   123444  182            AB12        25_Main_St Hanover  WZ        12345
CDE123    666       GGG     ttt    234567   87978   128            CD12        35_Main_St Hooray   TZ        23456
EFG123    777       RRR     uuu    54321    98765   812            EF12        45_Main_St Hello    WA        45678

Обратите внимание, что файлы не обязательно находятся в том же порядке, и в файле Mac больше строк, чем в файле не-Mac.Файл Mac имеет дубликаты LocationID и адреса, но Mac все разные.Файл не-Mac не будет иметь дубликатов LocationID или адресов.

1 Ответ

0 голосов
/ 27 сентября 2018

Вы можете использовать awk:

awk 'FNR == NR{k[$2]=$1; next} $6 in k{print k[$6], $0}' fileA fileB | column -t

MAC     objectid  Status  Data  X       Y       LocationID  Node_ID  Street      City     State  Zip_Code
ABC123  555       RRR     sss   123456  123444  182         AB12     25_Main_St  Hanover  WZ     12345
CDE123  666       GGG     ttt   234567  87978   128         CD12     35_Main_St  Hooray   TZ     23456
EFG123  777       RRR     uuu   54321   98765   812         EF12     45_Main_St  Hello    WA     45678
  • column -t используется для форматирования вывода в табличной форме.
  • На 1-м проходе мы обрабатываем fileA и сохраняем 1-й столбец с ключом в качестве 2-го столбца в ассоциативном массиве k
  • На 2-м проходе мы обрабатываем fileB и выбираем mac-адрес, используя ключ в качестве 6-го столбца(т.е. LocationID).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...