Bashでコンマ区切りの2つのテキストファイルをリンクします。

Bashでコンマ区切りの2つのテキストファイルをリンクします。

ファイル1:

Doe, John, phone123
Dane, Jane, phone124

ファイル2

phone123, longdistance, 10mins
phone124, local, 5mins
phone124, longdistance, 6mins

出力

Doe, John phone123 longdistance 10mins
Dane, Jane phone124 local 5mins
Dane, Jane phone124 longdistance 6mins

これまで私

join -1 1 -2 3 -o 2.1,2.2,1.1,1.2,1.3 file2.txt file1.txt > output.txt

ファイル 1 と 2 を空白で区切るだけで動作しますが、ファイルにカンマを入れると空白が出力されます。

答え1

実際の問題は、2文字のフィールド区切り記号です。結合や並べ替えなどのツールは、区切り文字が1文字だけであると予想します。

join -t, -13 -21 -o 1.1,1.2,1.3,2.2,2.3 \
  <(sed -E 's/, +/,/g' file1.txt | sort -t, -k3,3) \
  <(sed -E 's/, +/,/g' file2.txt | sort -t, -k1,1)

出力

Doe,John,phone123,longdistance,10mins
Dane,Jane,phone124,local,5mins
Dane,Jane,phone124,longdistance,6mins

| sed 's/,/, /g'「カンマスペース」区切り文字を復元するためにそれをパイプすることができます。


交互に、

awk '
    BEGIN {FS = ", *"; OFS = ", "}
    NR == FNR {name[$3] = $1 OFS $2; next}
    $1 in name {print name[$1], $0}
' file1.txt file2.txt

関連情報