如何在linux上使用join命令

如果要透過匹配公共欄位來合併兩個文字檔案中的資料,可以使用Linux join命令。它為靜態資料檔案添加了些許活力。我們會教你怎麼使用它。...

如果要透過匹配公共欄位來合併兩個文字檔案中的資料,可以使用Linux join命令。它為靜態資料檔案添加了些許活力。我們會教你怎麼使用它。

跨檔案匹配資料

資料為王。公司、企業和家庭都在這上面經營。但是資料儲存在不同的檔案中,由不同的人整理,這是一種痛苦。除了知道要開啟哪些檔案來查詢所需的資訊外,檔案的佈局和格式可能會有所不同。

您還必須處理管理方面的難題,即哪些檔案需要更新,哪些需要備份,哪些是遺留檔案,哪些可以存檔。

另外,如果您需要整合資料或跨整個資料集進行一些分析,您還有一個問題。在處理不同檔案的資料之前,如何使其合理化?如何進入資料準備階段?

好訊息是,如果這些檔案至少共享一個公共資料元素,那麼linuxjoin命令可以讓您擺脫困境。

資料檔案

我們將用於演示join命令使用的所有資料都是虛構的,從以下兩個檔案開始:

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

如何在linux上使用join命令

以下是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中的每一行都包含以下資訊:

  • 一個數字
  • 姓氏
  • 電子郵件地址
  • 此人的性別
  • 紐約的一個地區
  • 一美元的價值

join命令與“fields”一起使用,在本文中,fields表示由空格、行的開始或行的結束包圍的文字部分。為了使join匹配兩個檔案之間的行,每行必須包含一個公共欄位。

因此,只有在兩個檔案中都顯示欄位時,才能匹配該欄位。IP地址只出現在一個檔案中,所以這不好。第一個名稱只出現在一個檔案中,因此我們也不能使用它。姓氏在兩個檔案中,但這是一個很差的選擇,因為不同的人有相同的姓氏。

你也不能將資料與**和**條目聯絡在一起,因為它們太模糊了。紐約地區和美元值也只出現在一個檔案中。

但是,我們可以使用電子郵件地址,因為它在兩個檔案中都存在,並且每個檔案對一個人都是唯一的。快速瀏覽檔案還可以確認每個檔案中的行對應於同一個人,因此我們可以使用行號作為要匹配的欄位(稍後我們將使用不同的欄位)。

注意,這兩個檔案中有不同數量的欄位,這很好,我們可以告訴join每個檔案使用哪個欄位。

但是,要注意像紐約地區這樣的欄位;在以空格分隔的檔案中,地區名稱中的每個單詞看起來都像一個欄位。因為有些區域有兩個或三個單詞的名稱,所以在同一個檔案中實際上有不同數量的欄位。這是可以的,只要你匹配出現在紐約地區前一行的欄位。

join命令

首先,必須對要匹配的欄位進行排序。我們在兩個檔案中都有升序數字,所以我們符合這個標準。預設情況下,join使用檔案中的第一個欄位,這是我們想要的。另一個合理的預設值是join期望欄位分隔符為空格。再說一遍,我們有了,所以我們可以繼續,然後開火加入。

由於我們使用了所有的預設值,所以我們的命令很簡單:

join file-1.txt file-2.txt

如何在linux上使用join命令

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中沒有匹配欄位的欄位。

未排序欄位

讓我們試試我們知道行不通的東西。我們將把一個檔案中的行按順序排列,這樣join將無**確處理該檔案。file-3.txt的內容與file-2.txt相同,但第八行在第五行和第六行之間。

以下是file-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

我們鍵入以下命令以嘗試將file-3.txt連線到file-1.txt:

join file-1.txt file-3.txt

如何在linux上使用join命令

join報告檔案-3.txt中的第七行出現故障,因此未對其進行處理。第七行是以數字6開頭的,在正確排序的列表中,數字6應該在8之前。檔案中的第六行(以“8 Odell”開頭)是最後處理的一行,因此我們可以看到它的輸出。

如果您想檢視join是否符合檔案的排序順序,則可以使用--check order選項,而不會嘗試合併。

為此,我們鍵入以下內容:

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

如何在linux上使用join命令

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

如何在linux上使用join命令

輸出列出了七條合併行。

-a(print unpairable)選項告訴join也列印無法匹配的行。

在這裡,我們鍵入以下命令,告訴join列印檔案1中與檔案2中的行不匹配的行:

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

如何在linux上使用join命令

七行匹配,檔案一的第八行列印,不匹配。沒有任何合併資訊,因為file-4.txt不包含可以匹配的第8行。但是,至少它仍然出現在輸出中,因此您知道它在file-4.txt中沒有匹配項。

我們鍵入以下-v(抑制連線線)命令以顯示不匹配的任何行:

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

如何在linux上使用join命令

我們看到第8行是檔案2中唯一沒有匹配項的。

匹配其他欄位

讓我們在一個非預設欄位(欄位一)上匹配兩個新檔案。檔案-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

檔案-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

用於加入的唯一合理欄位是email address,它是第一個檔案中的欄位1和第二個檔案中的欄位2。為了適應這種情況,我們可以使用-1(fileone欄位)和-2(filetwo欄位)選項。我們將用一個數字來表示每個檔案中的哪個欄位應該用於連線。

我們鍵入以下命令,告訴join使用檔案1中的第一個欄位和檔案2中的第二個欄位:

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

如何在linux上使用join命令

檔案在電子郵件地址上合併,該地址顯示為輸出中每行的第一個欄位。

使用不同的欄位分隔符

如果檔案中的欄位不是用空格分隔的,會怎麼樣?

以下兩個檔案用逗號分隔,多個單詞的地名之間只有空格:

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

如何在linux上使用join命令

我們可以使用-t(分隔符)來告訴join哪個字元用作欄位分隔符。在本例中,它是逗號,因此我們鍵入以下命令:

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

如何在linux上使用join命令

所有的線都是匹配的,而空格則保留在地名中。

忽略字母大小寫

另一個檔案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

如何在linux上使用join命令

我們只匹配了六行。大寫字母和小寫字母的差異阻止了其他兩個電子郵件地址的連線。

但是,我們可以使用-i(忽略大小寫)選項強制join忽略這些差異,並匹配包含相同文字的欄位,而不考慮大小寫。

我們鍵入以下命令:

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

如何在linux上使用join命令

所有八行匹配並連線成功。

混搭

在join中,當您在處理棘手的資料準備時,您有一個強大的盟友。可能您需要分析資料,或者您正試圖將其轉換為形狀以執行到其他系統的匯入。

不管情況如何,你都會很高興加入你的行列!

  • 發表於 2021-04-02 15:30
  • 閱讀 ( 45 )
  • 分類:網際網路

你可能感興趣的文章

內部聯接(inner join)和自然連線(natural join)的區別

...表示id、name、grade、age等屬性。DBMS是表的集合,每個表都使用諸如外來鍵之類的約束進行關聯。有時僅僅使用一個表是不夠的。有些情況下需要使用多個表。要組合兩個表,至少有一列是公共的。表的組合稱為聯接。 目錄 1. 概...

  • 發佈於 2020-10-18 12:15
  • 閲讀 ( 48 )

所有程式設計師都應該知道的13條最重要的sql命令

... 注意行的順序是如何變化的嗎?Union以最有效的方式執行,因此返回的資料可以按順序變化。 ...

  • 發佈於 2021-03-14 06:57
  • 閲讀 ( 43 )

如何在linux上安裝和使用powershell

... 在本文中,我將向您展示如何在Linux上安裝、執行和使用PowerShell! ...

  • 發佈於 2021-03-16 02:34
  • 閲讀 ( 50 )

如何在android和termux上使用linux命令列

...許您在Android裝置上安裝誠實善良的Linux應用程式。下面是如何使用Termux應用程式。 ...

  • 發佈於 2021-03-18 07:26
  • 閲讀 ( 58 )

如何在windows10上獲得linux bash shell

... 如何在windows10上安裝linux bash shell ...

  • 發佈於 2021-03-21 11:48
  • 閲讀 ( 58 )

linux下如何重新命名檔案

要在Linux中重新命名檔案嗎?如果您知道如何在Windows、macOS或Chrome作業系統中完成這項工作,那麼您就知道如何在這裡完成這項工作。在大多數版本的Linux上,您只需右鍵單擊一個檔案並選擇Rename選項。 ...

  • 發佈於 2021-03-22 02:48
  • 閲讀 ( 63 )

linux正在吃掉你的公羊嗎?如何管理你的記憶

...記憶體。為了理解到底發生了什麼,我們必須看看Linux是如何管理記憶體的。 ...

  • 發佈於 2021-03-23 08:31
  • 閲讀 ( 55 )

如何在linux上使用groupadd管理使用者組

... 相關:如何在Linux中更改密碼 ...

  • 發佈於 2021-03-26 17:15
  • 閲讀 ( 39 )

如何在linux中新增使用者

想在Linux系統上新增使用者但不知道如何新增?在Linux上使用命令列介面管理使用者無疑是一項複雜的工作。而對於初學者來說,即使新增新使用者也是一場噩夢。 ...

  • 發佈於 2021-03-26 23:29
  • 閲讀 ( 64 )

如何使用sql連線一次查詢多個數據庫表

... 讓我們探索如何從多個數據庫表中準確地檢索所需的資料,以及各種可用的聯接,這些聯接允許您提取所需的準確結果。 ...

  • 發佈於 2021-03-27 04:02
  • 閲讀 ( 44 )
yjltu789
yjltu789

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦