Как присоединиться к файлам в Linux?

Таким образом, у меня в основном есть файл с именем vendors и другими именованными продуктами, и я должен присоединиться к ним на основе кода вендора, вывести код и имя продукта и имя поставщика в указанном порядке и добавить его в файл с именем lab4.txt. В вопросе также говорится: "Убедитесь, что для каждой невыполняемой строки в поставщиках файлов создается строка, а текст" Недоступно "используется для замены пустых полей для непоправимых строк". Я пытался сделать это с помощью команды соединения, но просто могу сделать это правильно. Вот как выглядят файлы:

Вендоры:

1201:Cromwell Interiors
1221:Design Extras Inc.
1320:Piedmont Plastics Inc.
1340:Morgan Catering Service Ltd.
1350:Pullman Elevators
1360:Johnson Office Products

Другой файл называется products:

S0107:Lobby Furniture:1201
S0109:Ballroom Specialties:1221
S0110:Poolside Carts:1320
S0130:Formal Dining Specials:1340
S0201:Reservation Logs:1410

Результат должен быть:

S0107:Lobby Furniture:Cromwell Interiors
S0109:Ballroom Specialties:Design Extras Inc.
S0110:Poolside Carts:Piedmont Plastics Inc.
S0130:Formal Dining Specials:Morgan Catering Service Ltd.
Not Available:Not Available:Pullman Elevators
Not Available:Not Available:Johnson Office Products

1 ответ

Решение

Исправленный ответ

Хорошо. Вот как получить желаемый результат.

join -a2 -o 1.1,1.2,2.2 -e "Not Available" -t':' -1 3 -2 1 products vendors

  • -a2 печатать негодные строки из файла 2
  • -o 1.1,1.2,2.2 выходной формат: FILE1FIELD1:FILE1FIELD2:FILE2FIELD2
  • -e "Not Available" замените отсутствующие поля ввода на Not Available. Требует, чтобы также был указан параметр -o.
  • -t':' используйте точку с запятой в качестве разделителя столбцов
  • -1 3 -2 1 объединение на основе столбца 3 файла 1 и столбца 1 файла 2.
  • products vendors файлы для присоединения; файл 1 - продукты, файл 2 - поставщики

Вывод команды:

[larntz@dido:/home/larntz/temp$ join -a2 -o 1.1,1.2,2.2 -e "Not Available" -t':' -1 3 -2 1 products vendors

S0107:Lobby Furniture:Cromwell Interiors
S0109:Ballroom Specialties:Design Extras Inc.
S0110:Poolside Carts:Piedmont Plastics Inc.
S0130:Formal Dining Specials:Morgan Catering Service Ltd.
Not Available:Not Available:Pullman Elevators
Not Available:Not Available:Johnson Office Products


Оригинальный неверный ответ

Учитывая два файла в вашем посте, это работает с объединенной версией 8.30 (Arch Linux).

join -a1 -a2 -e"Not Available" -t':' -1 1 -2 3 vendors products
  • -a1 -a2 говорит объединиться, чтобы напечатать все строки из обоих файлов
  • -e"Not Available" сообщает join, чтобы заменить пустые поля на Not Available. К сожалению, это не работает по какой-то причине. EDIT -e работает, только если -o (формат вывода) также указан.
  • -t':' сообщает join использовать точку с запятой в качестве разделителя полей
  • -1 1 говорит соединению использовать поле номер 1 в файле 1 (поставщики) для сопоставления с файлом 2
  • -2 3 говорит соединению использовать поле № 3 в файле 2 (продукты) для сопоставления с файлом 1
  • vendors products два файла для объединения, порядок вопросов основывается на -1 а также -2 параметры.

Вывод команды:

[larntz@dido:/home/larntz/temp$ join -a1 -a2 -e"Not Available"  -t':' -1 1 -2 3 vendors products
1201:Cromwell Interiors:S0107:Lobby Furniture
1221:Design Extras Inc.:S0109:Ballroom Specialties
1320:Piedmont Plastics Inc.:S0110:Poolside Carts
1340:Morgan Catering Service Ltd.:S0130:Formal Dining Specials
1350:Pullman Elevators
1360:Johnson Office Products
1410:S0201:Reservation Logs

Другие вопросы по тегам