paste and join (Linux)

paste格式:
paste -d -s file1 file2
paste將按行將不同文件行信息放在一行。缺省情況下,paste連接時,用空格或tab鍵分割新行中不同文件,但是可以用-d來指定分隔符。
選項含義如下:
-d    指定不同於空格或tab鍵的域分隔符。但是請注意:分隔符此時限定爲一個字符,如果給定多個字符,那麼將依次使用。
另外,-d還有一項功能就是指定每行含有的元素個數,比如:
ls | paster -d ""- - - 就是指每行含有三個元素。要是所有的內容歸結爲一行,那麼用下面的
-s  作用是將每個文件的內容合併爲一行,並列出。

Example:
[10:38:09@test]$ cat aa
a1
a2
a3
a4
a5
[10:38:19@test]$ cat bb
b1
b2
b3
b4
b5
[10:41:43@test]$ cat  cc
c1
c2
c3
c4
c5
[10:38:21@test]$ paste aa bb  #合併兩個文件,默認分隔符爲tab鍵或者空格
a1      b1
a2      b2
a3      b3
a4      b4
a5      b5
[10:38:30@test]$ paste bb aa #指定先後合併
b1      a1
b2      a2
b3      a3
b4      a4
b5      a5
[10:38:36@test]$ paste -d@ aa bb #指定分隔符合並
a1@b1
a2@b2
a3@b3
a4@b4
a5@b5
[10:42:02@test]$ paste aa bb cc  #可以合併多個文件,但是速度很慢
a1      b1      c1
a2      b2      c2
a3      b3      c3
a4      b4      c4
a5      b5      c5
[10:42:12@test]$ paste -d"@#" aa bb cc #指定多個分割符的情況,會依次排列使用
a1@b1#c1
a2@b2#c2
a3@b3#c3
a4@b4#c4
a5@b5#c5
[10:40:55@test]$ ls  #下一種情況,直接從管道符中提取數據
aa  bb  cc  dd  ee  ff  gg
[10:40:48@test]$ ls | paste -d" "   #默認情況是一行中指含有一個數據
aa
bb
cc
dd
ee
ff
gg
[10:41:14@test]$ ls | paste -d" " - - - -  #指定每行中含有元素的個數
aa bb cc dd
ee ff gg
[10:41:22@test]$ ls | paste -s  #一行顯示參數
aa      bb      cc      dd      ee      ff      gg

注1:paste對我來說的作用在於替代join來合併有共同列的文件合併。具體操作是,排列好對應的列,然後合併,並用cut或者awk用管道符提取所需要的字段。
cut和awk提取字段的區別在於,cut沒有對列排序的功能,但提取數據顯示很快速並可以簡寫,但是awk就不能簡寫,必須一個字段一個字段的慢慢的弄,弄死你,但是awk的好處也非常明顯,就是排序功能,下面是一個MANTOU的一個例子的命令行:
paste fre.xls fre2.xls | awk '{print $1"\t"$2"\t"$3"\t"$4"\t"$8"\t"$9"\t"$5"\t"$15"\t"$6"\t"$16"\t"$7}' > anno.fre.xls
注2:paste和join都是對文件進行合併,join的好處在於可以指定字段進行匹配,並找出相同或者不同的對應元素,但是缺點是我還沒有完全能使用join,具體是(1)分隔符不能靈活使用,比如tab就加不上(2)指定字段的時候老師報錯(3)-v尋找不同值測試失敗。
所以,現在paste基本能代替join的功能:直接合並對應文件,再使用awk或者其他linux命令進行操作。

期待高手出現,解決join的問題。


發佈了59 篇原創文章 · 獲贊 31 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章