Linux 字元轉換命令join

2021-09-06 15:36:46 字數 2435 閱讀 2105

join 看字面上的意義 (加入/參加) 就可以知道,他是在處理兩個檔案之間的資料,而且,主要是在處理『兩個檔案當中,有"相同資料"的那一行,才將他加在一起』的意思。我們利用底下的簡單例子來說明:

[root@www ~]# join [-ti12] file1 file2

選項與引數:

-t :join

預設以空格符分隔資料,並且比對『第乙個字段』的資料,

如果兩個檔案相同,則將兩筆資料聯成一行,且第乙個字段放在第乙個!

-i :忽略大小寫的差異;

-1 :這個是數字的 1

,代表『第乙個檔案要用那個欄位來分析』的意思;

-2:代表『第二個檔案要用那個欄位來分析』的意思。

範例一:用 root 的身份,將 /etc/passwd 與 /etc/shadow 相關資料整合成一欄

[root@www ~]# head -n 3 /etc/passwd /etc/shadow

==> /etc/passwd

<==root:x:

0:0:root:/root:/bin/bash

bin:x:

1:1:bin:/bin:/sbin/nologin

daemon:x:

2:2:daemon:/sbin:/sbin/nologin

==> /etc/shadow <==root:$

1$/3aqpe5e$y9a/d0bh6relas:14120:0:99999:7

:::bin:*:14126:0:99999:7

:::daemon:*:14126:0:99999:7

:::# 由輸出的資料可以發現這兩個檔案的最左邊欄位都是賬號!且以 : 分隔

[root@www ~]# join -t '

:' /etc/passwd /etc/shadow

root:x:

0:0:root:/root:/bin/bash:$1$/3aqpe5e$y9a/d0bh6relas:14120:0:99999:7

:::bin:x:

1:1:bin:/bin:/sbin/nologin:*:14126:0:99999:7

:::daemon:x:

2:2:daemon:/sbin:/sbin/nologin:*:14126:0:99999:7

:::# 透過上面這個動作,我們可以將兩個檔案第一字段相同者整合成一行!

# 第二個檔案的相同欄位並不會顯示(因為已經在第一行了嘛!)

範例二:我們知道 /etc/passwd

第四個欄位是 gid ,那個 gid 記錄在

/etc/group 當中的第三個字段,請問如何將兩個檔案整合?

[root@www ~]# head -n 3 /etc/passwd /etc/group

==> /etc/passwd

<==root:x:

0:0:root:/root:/bin/bash

bin:x:

1:1:bin:/bin:/sbin/nologin

daemon:x:

2:2:daemon:/sbin:/sbin/nologin

==> /etc/group <==root:x:

0:root

bin:x:

1:root,bin,daemon

daemon:x:

2:root,bin,daemon

# 從上面可以看到,確實有相同的部分喔!趕緊來整合一下!

[root@www ~]# join -t '

:' -1

4 /etc/passwd -2

3 /etc/group

0:root:x:0:root:/root:/bin/bash:root:x:root

1:bin:x:1:bin:/bin:/sbin/nologin:bin:x:root,bin,daemon

2:daemon:x:2:daemon:/sbin:/sbin/nologin:daemon:x:root,bin,daemon

# 同樣的,相同的字段部分被移動到最前面了!所以第二個檔案的內容就沒再顯示。

# 請讀者們配合上述顯示兩個檔案的實際內容來比對!

這個 join 在處理兩個相關的資料檔案時,就真的是很有幫助的啦! 例如上面的案例當中,我的 /etc/passwd, /etc/shadow, /etc/group 都是有相關性的, 其中 /etc/passwd, /etc/shadow 以賬號為相關性,至於 /etc/passwd, /etc/group 則以所謂的 gid (賬號的數字定義) 來作為他的相關性。根據這個相關性, 我們可以將有關係的資料放置在一起!這在處理資料可是相當有幫助的! 

此外,需要特別注意的是,在使用 join 之前,你所需要處理的檔案應該要事先經過排序 (sort) 處理! 否則有些比對的專案會被略過呢!特別注意了!

參考資料:

Linux 字元轉換命令col

root www col xb 選項與引數 x 將 tab 鍵轉換成對等的空格鍵 b 過濾掉所有的控制字元,包括rlf reverse line feed 和hrf halt rlf 範例一 利用 cat a 顯示出所有特殊按鍵,最後以 col 將 tab 轉成空白 root www cat a e...

Linux 字元轉換命令paste

這個 paste 就要比join 簡單多了!相對於 join 必須要比對兩個檔案的資料相關性,paste 就直接 將兩行貼在一起,且中間以 tab 鍵隔開 而已!簡單的使用方法 root www paste d file1 file2 選項與引數 d 後面可以接分隔字元。預設是以 tab 來分隔的!...

Linux 字元轉換命令tr

tr traslate的縮寫 可以用來刪除一段資訊當中的文字,或者是進行文字資訊的替換!root www tr ds set1 選項與引數 d 刪除資訊當中的 set1 這個字串 s 取代掉重複的字元!範例一 將 last 輸出的資訊中,所有的小寫變成大寫字元 root www last tr a ...