最初の列に基づいて2つのファイルの交点を見つける

最初の列に基づいて2つのファイルの交点を見つける

ファイルAに2つのファイルがあり、他のファイルBにシーケンス番号があります。列が多く、最初の列はシーケンス番号です。 Bのすべての行とシーケンス番号Aを含むファイルをインポートするにはどうすればよいですか?目標?ありがとう

ファイルAと同様

1
3
8
9
20

文書B

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

答え1

私はあなたが欲しいと思いますjoin (1)

同じ結合フィールドを持つ各入力行ペアに対して、標準出力に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)さて、明らかにこれをアルファ値(数字ではなく20 < 3)で並べ替えることと比較する必要があります。

join <(sort A) <(sort B)私にとってはうまくいきますが、奇妙に見えます。たぶんzsh拡張子かもしれません。こうしても悪いことはない

sort A > A.tmp; sort B > B.tmp; join A.tmp B.tmp

(いつものように、マンページで問題を確認してください。)

関連情報