一時ファイルを作成せずにコマンドラインでファイルを結合する方法


7

Linux / Bash環境には2つのファイルがあります。

# Example data
$ cat abc
2       a
1       b
3       c

$ cat bcd
5       c
2       b
1       d

最初の列の2つのファイルを結合しようとしています。入力ファイルは一致フィールドでソートする必要があるため、次は機能しません。

# Wrong: join on unsorted input does not work
$ join abc bcd

これを回避するには、2つの一時ファイルを作成して結合します

$ sort abc > temp1
$ sort bcd > temp2
$ join temp1 temp2
1 b d
2 a b

しかし、一時ファイルを作成せずにこれを行う方法はありますか?

回答:


18

以下はbashシェルで動作します:

# Join two files
$ join <(sort abc) <(sort bcd)
1 b d
2 a b

その列で入力ファイルをソートする限り、任意の列で結合できます

# Join on the second field
$ join -j2 <(sort -k2 abc) <(sort -k2 bcd)
b 1 2
c 3 5

sortの-k2引数は、2番目の列でのソートを意味します。joinの-j2引数は、2番目の列での結合を意味します。または、-1 x -2 y file1を結合file2は、file1のx番目の列とfile2のy番目の列で結合します。



1

これはbashシェルで動作します:

# Join two files
$ sort abc | join - <(sort bcd)
1 b d
2 a b

または

# Join two files
$ sort bcd | join <(sort abc) -
1 b d
2 a b

結合は「-」を使用して標準入力を読み取ることができるためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.