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 ...