Shell

根據第一列的兩個文件的交集

  • November 16, 2012

我在文件A中有兩個文件,另一個文件B中有sequence_numbers,有很多列,第一列是序列號,我想得到一個包含B中所有行的文件,其中的序列號在A 我怎樣才能做到這一點?謝謝

像文件A

1
3
8
9
20

文件 B

1 kfjk 3243424
2 fkdkf 23543592
3 iefjk 21493402
7 dlafdl 23435231
8 kfkdlkf 309834

你想要join (1),我猜:

對於具有相同連接欄位的每一對輸入行,將一行寫入標準輸出。預設連接欄位是第一個,由空格分隔。當 FILE1 或 FILE2(不是兩者)為 - 時,讀取標準輸入。

[0 1075 12:50:10] ~/temp/sx % join A B
1 kfjk 3243424
3 iefjk 21493402
8 kfkdlkf 309834
join: file 1 is not in sorted order

好的,所以顯然你需要將它與sort (1)按 alpha 值排序(不是數值,所以 20 < 3)

join &lt;(sort A) &lt;(sort B)對我有用,但這看起來很奇怪,可能是一個 zsh 擴展。這樣做沒有壞處

sort A &gt; A.tmp; sort B &gt; B.tmp; join A.tmp B.tmp

(像往常一樣,檢查手冊頁是否有陷阱。)

引用自:https://unix.stackexchange.com/questions/55890