web-dev-qa-db-ja.com

最初の列による2つのファイルの交差

ファイルAに2つのファイルがあり、他のファイル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
7
wenzi

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)と組み合わせて、アルファ値(数値ではないため、20 <3)で並べ替える必要があるようです。

join <(sort A) <(sort B)は私には機能しますが、それは奇妙に見え、zsh拡張機能である可能性があります。やっても害はありません

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

(いつものように、落とし穴がないかマニュアルページを確認してください。)

10
Ulrich Schwarz