Как да използвате командата за присъединяване в Linux

Ако искате да обедините данни от два текстови файла чрез съвпадение на общо поле, можете да използвате командата за присъединяване на Linux. Той добавя капка динамика към вашите статични файлове с данни. Ще ви покажем как да го използвате.

Съвпадение на данни във файлове

Данните са крал. Корпорации, бизнеси и домакинства работят с него. Но данните, съхранявани в различни файлове и събрани от различни хора, са мъка. Освен че знаете кои файлове да отворите, за да намерите информацията, която искате, оформлението и форматът на файловете вероятно ще бъдат различни.

Трябва също да се справите с административното главоболие кои файлове трябва да бъдат актуализирани, кои трябва да бъдат архивирани, кои са наследени и кои могат да бъдат архивирани.

Освен това, ако трябва да консолидирате данните си или да извършите някакъв анализ на цял набор от данни, имате допълнителен проблем. Как рационализирате данните в различните файлове, преди да можете да направите това, което трябва да направите с тях? Как подхождате към фазата на подготовка на данните?

Добрата новина е, че ако файловете споделят поне един общ елемент от данни, командата за присъединяване на Linux може да ви извади от калта.

Файловете с данни

Всички данни, които ще използваме, за да демонстрираме използването на командата за присъединяване, са измислени, като се започне със следните два файла:

cat file-1.txt
cat file-2.txt

Съдържанието на

Следното е съдържанието на file-1.txt:

1 Adore Varian [email protected] Female 192.57.150.231
2 Nancee Merrell [email protected] Female 22.198.121.181
3 Herta Friett [email protected] Female 33.167.32.89
4 Torie Venmore [email protected] Female 251.9.204.115
5 Deni Sealeaf [email protected] Female 210.53.81.212
6 Fidel Bezley [email protected] Male 72.173.218.75
7 Ulrikaumeko Standen [email protected] Female 4.204.0.237
8 Odell Jursch [email protected] Male 1.138.85.117

Имаме набор от номерирани редове и всеки ред съдържа цялата следна информация:

Номер
Първо име
Фамилно име
Имейл адрес
Полът на лицето
IP адрес

Следното е съдържанието на file-2.txt:

1 Varian [email protected] Female Western New York $535,304.73
2 Merrell [email protected] Female Finger Lakes $309,033.10
3 Friett [email protected] Female Southern Tier $461,664.44
4 Venmore [email protected] Female Central New York $175,818.02
5 Sealeaf [email protected] Female North Country $126,690.15
6 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Standen [email protected] Female Capital District $674,634.93
8 Jursch [email protected] Male Hudson Valley $663,821.09

Всеки ред във file-2.txt съдържа следната информация:

Номер
Фамилно име
Имейл адрес
Полът на лицето
Регион на Ню Йорк
Стойност в долар

Командата за присъединяване работи с „полета“, което в този контекст означава част от текст, заобиколена от интервали, началото на ред или края на ред. За да съвпадне редовете между двата файла, всеки ред трябва да съдържа общо поле.

Следователно можем да съпоставим поле само ако то се появява и в двата файла. IP адресът се появява само в един файл, така че това не е добре. Първото име се появява само в един файл, така че не можем да използваме и него. Фамилното име е и в двата файла, но би било лош избор, тъй като различни хора имат една и съща фамилия.

  Падането на Макс Пейн в Linux

Не можете също да обвържете данните с мъжките и женските записи, защото са твърде неясни. Регионите на Ню Йорк и стойностите на долара също се появяват само в един файл.

Въпреки това можем да използваме имейл адреса, защото присъства и в двата файла и всеки е уникален за отделно лице. Бърз преглед на файловете също потвърждава, че редовете във всеки отговарят на един и същ човек, така че можем да използваме номерата на редовете като нашето поле за съвпадение (по-късно ще използваме различно поле).

Имайте предвид, че има различен брой полета в двата файла, което е добре – можем да кажем на join кое поле да използва от всеки файл.

Внимавайте обаче за полета като регионите на Ню Йорк; във файл, разделен с интервал, всяка дума в името на регион изглежда като поле. Тъй като някои региони имат имена от две или три думи, всъщност имате различен брой полета в един и същи файл. Това е добре, стига да отговаряте на полета, които се появяват в реда преди регионите на Ню Йорк.

Командата за присъединяване

Първо, полето, което ще съпоставите, трябва да бъде сортирано. Имаме нарастващи числа и в двата файла, така че отговаряме на тези критерии. По подразбиране join използва първото поле във файл, което искаме. Друго разумно подразбиране е, че присъединяването очаква разделителите на полета да бъдат празни интервали. Отново имаме това, така че можем да продължим и да се присъединим.

Тъй като използваме всички настройки по подразбиране, нашата команда е проста:

join file-1.txt file-2.txt

В

join счита файловете за „файл един“ и „файл два“ ​​според реда, в който са изброени в командния ред.

Резултатът е както следва:

1 Adore Varian [email protected] Female 192.57.150.231 Varian [email protected] Female Western New York $535,304.73
2 Nancee Merrell [email protected] Female 22.198.121.181 Merrell [email protected] Female Finger Lakes $309,033.10
3 Herta Friett [email protected] Female 33.167.32.89 Friett [email protected] Female Southern Tier $461,664.44
4 Torie Venmore [email protected] Female 251.9.204.115 Venmore [email protected] Female Central New York $175,818.02
5 Deni Sealeaf [email protected] Female 210.53.81.212 Sealeaf [email protected] Female North Country $126,690.15
6 Fidel Bezley [email protected] Male 72.173.218.75 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Ulrikaumeko Standen [email protected] Female 4.204.0.237 Standen [email protected] Female Capital District $674,634.93
8 Odell Jursch [email protected] Male 1.138.85.117 Jursch [email protected] Male Hudson Valley $663,821.09

Резултатът се форматира по следния начин: Първо се отпечатва полето, в което са съпоставени редовете, следвано от другите полета от файл 1 и след това полетата от файл 2 без полето за съвпадение.

  Как да наблюдавате мрежовата честотна лента на Linux

Несортирани полета

Нека опитаме нещо, което знаем, че няма да работи. Ще поставим редовете в един файл извън ред, така че join няма да може да обработи файла правилно. Съдържанието на file-3.txt е същото като на file-2.txt, но осмият ред е между редове пет и шест.

Следното е съдържанието на файл-3.txt:

1 Varian [email protected] Female Western New York $535,304.73
2 Merrell [email protected] Female Finger Lakes $309,033.10
3 Friett [email protected] Female Southern Tier $461,664.44
4 Venmore [email protected] Female Central New York $175,818.02
5 Sealeaf [email protected] Female North Country $126,690.15
8 Jursch [email protected] Male Hudson Valley $663,821.09
6 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Standen [email protected] Female Capital District $674,634.93

Пишем следната команда, за да се опитаме да се присъединим към файл-3.txt към файл-1.txt:

join file-1.txt file-3.txt

В

join съобщава, че седмият ред във file-3.txt не е в ред, така че не се обработва. Ред седми е този, който започва с числото шест, което трябва да е преди осем в правилно сортиран списък. Шестият ред във файла (който започва с „8 Odell“) беше последният обработен, така че виждаме изхода за него.

Можете да използвате опцията –check-order, ако искате да видите дали присъединяването е доволно от реда на сортиране на файловете – няма да се прави опит за сливане.

За целта набираме следното:

join --check-order file-1.txt file-3.txt

В

join ви казва предварително, че ще има проблем с ред седми от файла file-3.txt.

Файлове с липсващи редове

Във file-4.txt последният ред е премахнат, така че няма ред осем. Съдържанието е както следва:

1 Varian [email protected] Female Western New York $535,304.73
2 Merrell [email protected] Female Finger Lakes $309,033.10
3 Friett [email protected] Female Southern Tier $461,664.44
4 Venmore [email protected] Female Central New York $175,818.02
5 Sealeaf [email protected] Female North Country $126,690.15
6 Bezley [email protected] Male Mohawk Valley $366,733.78
7 Standen [email protected] Female Capital District $674,634.93

Пишем следното и, изненадващо, join не се оплаква и обработва всички редове, които може:

join file-1.txt file-4.txt

В

Резултатът изброява седем обединени реда.

Опцията -a (отпечатване без сдвояване) казва на присъединяването да отпечата и редовете, които не могат да бъдат съпоставени.

Тук въвеждаме следната команда, за да кажем на join да отпечата редовете от файл 1, които не могат да бъдат съпоставени с редове във файл два:

join -a 1 file-1.txt file-4.txt

В

Седем реда са съпоставени, а ред осем от файл един се отпечатва, несъпоставен. Няма обединена информация, тъй като file-4.txt не съдържа ред осми, с който може да се съпостави. Въпреки това, поне все още се появява в изхода, така че да знаете, че няма съвпадение във file-4.txt.

Набираме следната команда -v (потискане на съединените редове), за да разкрием всички редове, които нямат съвпадение:

join -v file-1.txt file-4.txt

В

Виждаме, че ред осем е единственият, който няма съвпадение във файл два.

Съвпадение на други полета

Нека съпоставим два нови файла в поле, което не е по подразбиране (поле едно). Следното е съдържанието на file-7.txt:

[email protected] Female 192.57.150.231
[email protected] Female 210.53.81.212
[email protected] Male 72.173.218.75
[email protected] Female 33.167.32.89
[email protected] Female 22.198.121.181
[email protected] Male 1.138.85.117
[email protected] Female 251.9.204.115
[email protected] Female 4.204.0.237

И следното е съдържанието на file-8.txt:

Female [email protected] Western New York $535,304.73
Female [email protected] North Country $126,690.15
Male [email protected] Mohawk Valley $366,733.78
Female [email protected] Southern Tier $461,664.44
Female [email protected] Finger Lakes $309,033.10
Male [email protected] Hudson Valley $663,821.09
Female [email protected] Central New York $175,818.02
Female [email protected] Capital District $674,634.93

Единственото разумно поле, което да използвате за присъединяване, е имейл адресът, който е поле едно в първия файл и поле второ във втория. За да посрещнем това, можем да използваме опциите -1 (файл едно поле) и -2 (файл две поле). Ще ги последваме с число, което показва кое поле във всеки файл трябва да се използва за присъединяване.

  Как да инсталирате Linux от телефон с Android с DriveDroid

Пишем следното, за да кажем на join да използва първото поле във файл едно и второто във файл два:

join -1 1 -2 2 file-7.txt file-8.txt

В

Файловете се обединяват на имейл адреса, който се показва като първото поле на всеки ред в изхода.

Използване на различни разделители на полета

Ами ако имате файлове с полета, които са разделени с нещо различно от интервал?

Следните два файла са разделени със запетая — единственото празно пространство е между имената на места от няколко думи:

cat file-5.txt
cat file-6.txt

Съдържанието на

Можем да използваме -t (разделителен знак), за да кажем на присъединяване кой знак да използва като разделител на полето. В този случай това е запетаята, така че въвеждаме следната команда:

join -t, file-5.txt file-6.txt

В

Всички линии са съпоставени и интервалите са запазени в имената на местата.

Пренебрегване на букви

Друг файл, file-9.txt, е почти идентичен с file-8.txt. Единствената разлика е, че някои от имейл адресите имат главна буква, както е показано по-долу:

Female [email protected] Western New York $535,304.73
Female [email protected] North Country $126,690.15
Male [email protected] Mohawk Valley $366,733.78
Female [email protected] Southern Tier $461,664.44
Female [email protected] Finger Lakes $309,033.10
Male [email protected] Hudson Valley $663,821.09
Female [email protected] Central New York $175,818.02
Female [email protected] Capital District $674,634.93

Когато се присъединихме към file-7.txt и file-8.txt, тя работи перфектно. Нека видим какво се случва с file-7.txt и file-9.txt.

Набираме следната команда:

join -1 1 -2 2 file-7.txt file-9.txt

В

Съпоставихме само шест реда. Разликите в главните и малките букви попречиха на присъединяването на другите два имейл адреса.

Въпреки това, можем да използваме опцията -i (игнориране на главни и малки букви), за да принудим присъединяването да игнорира тези разлики и да съвпада полета, които съдържат един и същ текст, независимо от главния и главния шрифт.

Набираме следната команда:

join -1 1 -2 2 -i file-7.txt file-9.txt

В

Всичките осем реда са съпоставени и съединени успешно.

Смесете и съчетайте

При присъединяването вие имате мощен съюзник, когато се борите с неудобна подготовка на данни. Може би трябва да анализирате данните или може би се опитвате да ги масажирате във форма, за да извършите импортиране в друга система.

Без значение каква е ситуацията, ще се радвате, че сте се присъединили към вашия ъгъл!