web-dev-qa-db-ja.com

行によるファイルのマージ

sedまたはawkを使用した単純なbashスクリプトを使用して、File1の指示に従って、File3の行全体を新しいFile2にコピーすることは可能ですか?

File1: /*two or more columns*/
AC    456324
DC    689712
GH    123677
KL    236587

File2: /*one column*/
AC
DC

File3: 
AC    456324
DC    689712

私は実際にPython辞書を使用してこれを実行していますが、簡単な方法を知っているかどうか疑問に思いました。

3
dovah

grepを使用

grep -Ff File2 File1

awkを使用

awk 'NR==FNR {a[$1]++;next} a[$1]' File2 File1
5
steeldriver

join を使用して、特定の列が両方のファイルで同じ値を持つ場合に、2つのファイルの行を結合して結合できます。入力ファイルは、その列の値でソートする必要があることに注意してください。

join File1 File2

ファイルがソートされていない場合、bash/ksh93/zshで:

join <(sort File1) <(sort File2)

ここで、結合するフィールドは、ACDCなどを含むフィールドです。結合するフィールドがFile1の列3で、File2の列2である場合の例を次に示します。

join -1 3 -2 2 <(sort -k3,3 File1) <(sort -k 2,2 File2)