linux命令join与paste
生活随笔
收集整理的這篇文章主要介紹了
linux命令join与paste
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- join
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) 處理! 否則有些比對的項目會被略過呢!特別注意了!
- paste
這個 paste 就要比 join 簡單多了!相對于 join 必須要比對兩個文件的數據相關性, paste 就直接『將兩行貼在一起,且中間以 [tab] 鍵隔開』而已!簡單的使用方法:
| [root@www ~]# paste [-d] file1 file2
選項與參數:
-d :后面可以接分隔字符。默認是以 [tab] 來分隔的!
- :如果 file 部分寫成 - ,表示來自 standard input 的數據的意思。范例一:將 /etc/passwd 與 /etc/shadow 同一行貼在一起
[root@www ~]# paste /etc/passwd /etc/shadow
bin:x:1:1:bin:/bin:/sbin/nologin bin:*:14126:0:99999:7:::
daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:*:14126:0:99999:7:::
adm:x:3:4:adm:/var/adm:/sbin/nologin adm:*:14126:0:99999:7:::
# 注意喔!同一行中間是以 [tab] 按鍵隔開的!范例二:先將 /etc/group 讀出(用 cat),然后與范例一貼上一起!且僅取出前三行
[root@www ~]# cat /etc/group|paste /etc/passwd /etc/shadow -|head -n 3
# 這個例子的重點在那個 - 的使用!那玩意兒常常代表 stdin 喔!
|
總結
以上是生活随笔為你收集整理的linux命令join与paste的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分割命令: split
- 下一篇: 排序命令: sort, wc, uniq