Как присоединиться к файлам в 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 (продукты) для сопоставления с файлом 1vendors 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