Како користити команду придруживања на Линук-у

Ако желите да спојите податке из две текстуалне датотеке подударањем са заједничким пољем, можете користити Линук команду придруживања. То додаје мало динамике вашим статичким датотекама података. Показаћемо вам како да га користите.

Подударање података у свим датотекама

Подаци су краљ. Корпорације, предузећа и домаћинства подједнако раде на томе. Али подаци који се чувају у различитим датотекама и пореде их различити људи су мука. Поред тога што знате које датотеке да отворите да бисте пронашли информације које желите, изглед и формат датотека ће вероватно бити другачији.

Такође морате да се носите са административном главобољом о томе које датотеке треба ажурирати, које треба направити резервну копију, које су наслеђене и које се могу архивирати.

Осим тога, ако треба да консолидујете своје податке или извршите неку анализу читавог скупа података, имате додатни проблем. Како рационализујете податке у различитим датотекама пре него што можете да урадите оно што треба да урадите са њима? Како приступате фази припреме података?

Добра вест је да ако датотеке деле бар један заједнички елемент података, Линук команда придруживања може да вас извуче из блата.

Датотеке са подацима

Сви подаци које ћемо користити да демонстрирамо употребу команде придруживања су измишљени, почевши од следеће две датотеке:

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

Садржај од

Следи садржај датотеке-1.ткт:

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

Имамо скуп нумерисаних линија, а сваки ред садржи све следеће информације:

Број
Име
Презиме
Адреса е-поште
Пол особе
ИП адреса

Следи садржај датотеке-2.ткт:

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

Сваки ред у фајлу-2.ткт садржи следеће информације:

Број
Презиме
Адреса е-поште
Пол особе
Регион Њујорка
Вредност долара

Команда спајања ради са „пољима“, што у овом контексту значи део текста окружен размаком, почетак реда или крај реда. Да би спајање одговарало редовима између две датотеке, сваки ред мора да садржи заједничко поље.

Због тога можемо да ускладимо поље само ако се појављује у обе датотеке. ИП адреса се појављује само у једној датотеци, тако да то није добро. Прво име се појављује само у једној датотеци, тако да ни то не можемо да користимо. Презиме је у оба фајла, али то би био лош избор, јер различити људи имају исто презиме.

  Како да подесите СофтЕтхер ВПН преко ХТТПС клијента на Виндовс-у и Линук-у

Податке не можете повезати ни са мушким и женским уносима, јер су превише нејасни. Региони Њујорка и вредности долара се такође појављују само у једној датотеци.

Међутим, можемо да користимо адресу е-поште јер је присутна у обе датотеке и свака је јединствена за појединца. Брзи преглед датотека такође потврђује да редови у свакој одговарају истој особи, тако да можемо користити бројеве редова као наше поље за подударање (касније ћемо користити друго поље).

Имајте на уму да постоји различит број поља у две датотеке, што је у реду – можемо рећи придруживању које поље да користи из сваке датотеке.

Међутим, пазите на поља попут региона Њујорка; у датотеци раздвојеној размаком, свака реч у имену региона изгледа као поље. Пошто неки региони имају имена од две или три речи, заправо имате различит број поља унутар исте датотеке. Ово је у реду, све док се подударате на пољима која се појављују у реду испред региона Њујорка.

Команда за спајање

Прво, поље које ћете ускладити мора бити сортирано. Имамо растуће бројеве у оба фајла, тако да испуњавамо те критеријуме. Подразумевано, придруживање користи прво поље у датотеци, што је оно што желимо. Још једно разумно подразумевано је да спајање очекује да сепаратори поља буду размаци. Опет, имамо то, тако да можемо да кренемо и да се придружимо.

Пошто користимо све подразумеване вредности, наша команда је једноставна:

join file-1.txt file-2.txt

Тхе

јоин сматра да су датотеке „фајл један“ и „датотека два“ ​​према редоследу којим су наведене на командној линији.

Излаз је следећи:

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

Излаз је форматиран на следећи начин: Прво се штампа поље у коме су се линије подударале, затим следе остала поља из датотеке један, а затим поља из датотеке два без поља за подударање.

  Како додати кориснике у Судоер датотеку на Линук-у

Унсортед Фиелдс

Хајде да пробамо нешто за шта знамо да неће успети. Ставићемо редове у једну датотеку ван реда, тако да јоин неће моћи да обради датотеку исправно. Садржај датотеке-3.ткт је исти као и фајл-2.ткт, али ред осам је између редова пет и шест.

Следи садржај датотеке-3.ткт:

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.ткт у фајл-1.ткт:

join file-1.txt file-3.txt

Тхе

јоин извештава да седми ред у датотеци-3.ткт није у реду, тако да није обрађен. Ред седам је онај који почиње бројем шест, који треба да стоји испред осам у исправно сортираној листи. Шести ред у датотеци (који почиње са „8 Оделл“) је био последњи обрађен, тако да видимо излаз за њега.

Можете да користите опцију –цхецк-ордер ако желите да видите да ли је придруживање задовољно редоследом сортирања датотека – неће бити покушаја спајања.

Да бисмо то урадили, откуцавамо следеће:

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

Тхе

јоин вам унапред говори да ће бити проблема са линијом седам датотеке филе-3.ткт.

Датотеке са недостајућим линијама

У датотеци-4.ткт, последњи ред је уклоњен, тако да нема реда осам. Садржај је следећи:

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 file-1.txt file-4.txt

Тхе

Излаз наводи седам спојених линија.

Опција -а (штампање није упарено) говори придруживању да одштампа и линије које се не могу упарити.

Овде укуцавамо следећу команду да кажемо придруживању да одштампа редове из датотеке један који се не могу упарити са редовима у датотеци два:

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

Тхе

Седам редова је упарено, а ред осам из датотеке један је одштампан, неусклађен. Нема обједињене информације јер датотека-4.ткт није садржала ред осам са којим би се могла упарити. Међутим, барем се још увек појављује у излазу, тако да знате да нема подударања у фајлу-4.ткт.

Укуцавамо следећу команду -в (суппресс јоинт линес) да бисмо открили све редове који се не подударају:

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

Тхе

Видимо да је ред осам једини који нема подударање у датотеци два.

Подударање других поља

Хајде да упаримо две нове датотеке у пољу које није подразумевано (поље један). Следи садржај датотеке-7.ткт:

[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

А следеће је садржај датотеке-8.ткт:

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 (датотека два поља). Пратићемо их бројем који означава које поље у свакој датотеци треба да се користи за придруживање.

  Како организовати своје породично стабло на Линук-у са Грампс-ом

Укуцавамо следеће да кажемо придруживању да користи прво поље у датотеци један, а друго у датотеци два:

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

Тхе

Датотеке се спајају на адресу е-поште, која се приказује као прво поље сваког реда у излазу.

Коришћење различитих сепаратора поља

Шта ако имате датотеке са пољима која су одвојена нечим другим осим размака?

Следеће две датотеке су раздвојене зарезима — једини размак је између назива места са више речи:

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

Садржај од

Можемо користити -т (карактер за раздвајање) да кажемо придруживању који знак да користи као сепаратор поља. У овом случају, то је зарез, па укуцавамо следећу команду:

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

Тхе

Све линије су усклађене, а размаци су сачувани у називима места.

Игнорисање великих и малих слова

Други фајл, филе-9.ткт, је скоро идентичан фајлу-8.ткт. Једина разлика је у томе што неке од адреса е-поште имају велико слово, као што је приказано у наставку:

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

Када смо спојили филе-7.ткт и филе-8.ткт, функционисало је савршено. Хајде да видимо шта се дешава са филе-7.ткт и филе-9.ткт.

Укуцавамо следећу команду:

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

Тхе

Упарили смо само шест линија. Разлике у великим и малим словима спречиле су спајање друге две адресе е-поште.

Међутим, можемо да користимо опцију -и (занемари велика и мала слова) да присилимо придруживање да игнорише те разлике и подудара поља која садрже исти текст, без обзира на велика и мала слова.

Укуцавамо следећу команду:

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

Тхе

Свих осам редова је упарено и успешно спојено.

Комбинујете и

У придруживању, имате моћног савезника када се борите са незгодном припремом података. Можда треба да анализирате податке, или можда покушавате да их масирате у облик да бисте извршили увоз у други систем.

Без обзира каква је ситуација, биће вам драго што сте се придружили у свом углу!