linux下最常用的資料檔案格式是文字格式的,多個字段之間通過分隔符來區分,分隔符比如冒號(:)、製表符、空格等。/etc/passwd和/etc/group就是用:來分隔的,用mysql的into outfile指令匯出的資料通常是以製表符分隔的。這種文字格式既方便人去閱讀,也適合程式處理,通常某列類似於資料庫中的關鍵字。join命令就是乙個根據關鍵字合併資料檔案的命令(join lines of two files on a common field),類似於資料庫中兩張表關聯查詢。
join命令根據公共字段(關鍵字)來合併兩個檔案的資料行。因此最簡單的使用方式就是指定兩個資料檔名,這兩個檔案的第一列就是公共字段,字段之間以空白分隔。(for each pair of input lines with identical join fields, write a line to standard output. the default join field is the first, delimited by whitespace. when file1 or file2 (not both) is -, read standard input.)
內連線(inner join) 格式:join
左連線(left join, 左外連線, left outer join) 格式:join -a1
右連線(right join, 右外連線,right outer join) 格式:join -a2
全連線(full join, 全外連線, full outer join) 格式:join -a1 -a2
指定分隔符:
-t 比如:-t ':' 使用冒號作為分隔符。預設的分隔符是空白。
指定輸出字段:
-o ...
其中fileno=1表示第乙個檔案,fileno=2表示第二個檔案,fieldno表示字段序號,從1開始編號。缺省會全部輸出,但關鍵字列只輸出一次。
比如:-o 1.1 1.2 2.2 表示輸出第乙個檔案的第乙個字段、第二個字段,第二個檔案的第二個字段。
不指定任何引數的情況下使用join命令,就相當於資料庫中的內連線,關鍵字不匹配的行不會輸出。
[root@rhel55 linux]# cat month_cn.txt
1 一月
2 二月
3 三月
4 四月
5 五月
6 六月
7 七月
8 八月
9 九月
10 十月
11 十一月
12 十二月
13 十三月,故意的
[root@rhel55 linux]# cat month_en.txt
1 january
2 february
3 march
4 april
5 may
6 june
7 july
8 august
9 september
10 october
11 november
12 december
14 monthunknown
注:注意兩個檔案的內容,中文版的多了十三月,英文版的多了14月,這純粹是為了方便演示。
[root@rhel55 linux]# join month_cn.txt month_en.txt
1 一月 january
2 二月 february
3 三月 march
4 四月 april
5 五月 may
6 六月 june
7 七月 july
8 八月 august
9 九月 september
10 十月 october
11 十一月 november
12 十二月 december
[root@rhel55 linux]#
顯示左邊檔案中的所有記錄,右邊檔案中沒有匹配的顯示空白。
[root@rhel55 linux]#join -a1 month_cn.txt month_en.txt
1 一月 january
2 二月 february
3 三月 march
4 四月 april
5 五月 may
6 六月 june
7 七月 july
8 八月 august
9 九月 september
10 十月 october
11 十一月 november
12 十二月 december
13 十三月,故意的
[root@rhel55 linux]#
顯示右邊檔案中的所有記錄,左邊檔案中沒有匹配的顯示空白。
[root@rhel55 linux]# join -a2 month_cn.txt month_en.txt
1 一月 january
2 二月 february
3 三月 march
4 四月 april
5 五月 may
6 六月 june
7 七月 july
8 八月 august
9 九月 september
10 十月 october
11 十一月 november
12 十二月 december
14 monthunknown
[root@rhel55 linux]#
[root@rhel55 linux]#join -a1 -a2 month_cn.txt month_en.txt
1 一月 january
2 二月 february
3 三月 march
4 四月 april
5 五月 may
6 六月 june
7 七月 july
8 八月 august
9 九月 september
10 十月 october
11 十一月 november
12 十二月 december
13 十三月,故意的
14 monthunknown
[root@rhel55 linux]#
比如引數 -o 1.1 表示只輸出第乙個檔案的第乙個字段。
[root@rhel55 linux]# join -o 1.1 month_cn.txt month_en.txt 12
3456
78910
1112
[root@rhel55 linux]# join -o 1.1 2.2 month_cn.txt month_en.txt
1 january
2 february
3 march
4 april
5 may
6 june
7 july
8 august
9 september
10 october
11 november
12 december
[root@rhel55 linux]# join -o 1.1 2.2 1.2 month_cn.txt month_en.txt
1 january 一月
2 february 二月
3 march 三月
4 april 四月
5 may 五月
6 june 六月
7 july 七月
8 august 八月
9 september 九月
10 october 十月
11 november 十一月
12 december 十二月
[root@rhel55 linux]# join -o 1.1 2.2 1.2 1.3 month_cn.txt month_en.txt
<== 欄位1.3並不存在
1 january 一月
2 february 二月
3 march 三月
4 april 四月
5 may 五月
6 june 六月
7 july 七月
8 august 八月
9 september 九月
10 october 十月
11 november 十一月
12 december 十二月
[root@rhel55 linux]#
[root@rhel55 linux]# join -t ':' /etc/passwd /etc/shadow
一天一條Linux指令 cd
嵌入式開發需要不斷積累linux相關知識,所以在此天天不厭其煩 日積月累。cd change directory 命令是linux中最常用命令之一,我覺得另乙個應該是ls 後續介紹 主要功能是跳轉到cd命令指定目錄。cd命令格式 cd l p dir 常用cd命令 1.跳轉到指定目錄 cd dir ...
一天一條Linux指令 apt
由於昨天去assem公司除錯電路,接觸linux下依賴包的安裝大牛,遂整理了一下apt命令。apt get命令本身並不具有管理軟體包功能,只是提供了乙個軟體包管理的命令列平台。在這個平台上使用更豐富的子命令,完成具體的管理任務。apt get命令的一般語法格式為 apt get subcommand...
一天一條Linux指令 find
前言 我們為什麼要學會使用find命令?每一種作業系統都有成千上萬的檔案組成,對於linux這樣 一切皆檔案 的作業系統來說更不例外,大家應該都能很輕鬆使用windows下的檔案查詢功能,但是對linux這一功能可能並不是很熟悉,其實想玩linux的你更要牢牢掌握這個命令,因為linux不像wind...