2 番目のファイルが一致する場合は、最初のファイルのパターンを印刷します。

2 番目のファイルが一致する場合は、最初のファイルのパターンを印刷します。

私はこれらのファイルを持っています。

ファイル1.txt

A
B
C
D
E

ファイル2.txt

A 1
B 2
D 3

私が望む出力は次のとおりです。

A
B
D

試してみましたが、grep -Ff file1.txt file2.txt結果は

A 1
B 2
D 3

答え1

場所join:

join -o 1.1 f1.txt f2.txt

デフォルトでは、joinファイルのスペースで区切られた最初のフィールドが関連付けられます。-o 1.1出力を指定すると、最初のファイルの最初のフィールドにのみ興味があります。

sortファイルがソートされていない場合は、まずファイルをソートする必要があります。

join -o 1.1 <(sort f1.txt) <(sort f2.txt)

例:

$ cat f1.txt                    
A
B
C
D
E

$ cat f2.txt                    
A 1
B 2
D 3

$ join -o 1.1 f1.txt f2.txt 
A
B
D

答え2

joinこれよりはるかに簡単ですが、を使って試してみることもできますawk

awk 'NR==FNR{a[$1]=$1}NR!=FNR && $1 in a{print a[$1]}' file1.txt file2.txt

デモ

$ cat file1.txt                    
A
B
C
D
E

$ cat file2.txt                    
A 1
B 2
D 3

$ awk 'NR==FNR{a[$1]=$1}NR!=FNR && $1 in a{print a[$1]}' file1.txt file2.txt
A
B
D

関連情報