私はこれらのファイルを持っています。
ファイル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