coreutilsのマニュアルで学んだ。join
-e string
入力から欠落している出力フィールドを文字列に置き換えます。つまり、-12joオプションで指定されたフィールドがありません。
私はこのオプションをまったく理解していません。次はどういう意味ですか?
「入力に出力フィールドがありません」
「-12joオプションで指定されたフィールドがありません」?
ありがとうございます。
答え1
少し秘密の文字列は、、、および-12jo
4つの個別のオプションを表します。そのうち最初の3つは各ファイルに含めるフィールドを選択することに関連し、最後は各ファイルのどのフィールドを出力するかを選択することに関連します。このオプションはGNUの拡張であり、ここで整数はどこにあるかと同じです。-1
-2
-j
-o
-j
join
-j n
-1 n -2 n
n
このオプションは、要求のインポートを使用するときに-e
適用されます。-a
ペアリングされていない参加している1つまたは2つのファイルの行。あるファイルの行が他のファイルの行と一致しないため、ペアになっていない行はデータを失います。この-e
オプションは、これらのフィールドを指定された文字列に置き換えます。同様に-o
、要求ファイルの特定の行に存在しないフィールドを使用している場合は、-e
null値を文字列に置き換えることができます。
例:2つのファイルには、複数の製品の製造コストと販売収益が含まれています。各ファイルにはフィールドがあります。
- 製品番号
- 商品名
- いくつかの数
$ cat expenses.txt
1 teacup 5
2 spoon 7
3 bowl 10
$ cat sales.txt
1 teacup 30
2 spoon 24
手数料を受けるためにそしてすべての製品の販売、文字列(最初のファイルまたは2番目のファイル)から欠落している可能性がある数字を変更しながら、次の操作をNONE
行います。
$ join -a1 -a2 -o0,1.2,1.3,2.3 -e NONE expenses.txt sales.txt
1 teacup 5 30
2 spoon 7 24
3 bowl 10 NONE
ここでは、この-a
オプションを2回使用して両方のファイルのすべての行を要求します(SQLの「完全外部結合」)。この-o
オプションは、各ファイルから特定のフィールドを取得するために使用されます(フィールドはデフォルトで各0
ファイルの最初のフィールドである連結フィールドです)、欠落値を-e
置き換えるために使用される文字列を指定します。NONE
ご覧のNONE
とおり、ID 3の商品が2番目のファイルに記載されていないため、「Sales Value」を取得します。