Bashでのレコードの一致とマージ

Bashでのレコードの一致とマージ

2つのcsvファイルを考えてみましょう。

$ cat given.csv
123,John
246,Paul
369,George
987,Ringo

$ cat family.csv
246,McCartney
123,Lennon
987,Starr
369,Harrison

この行は順序ではないことに注意してください!および他のawkツールを使用して結合された出力ファイルをインポートする方法(順序は重要ではありません):grepbash

123,John,Lennon
246,Paul,McCartney
369,George,Harrison
987,Ringo,Starr

最初のファイルでループを実行し、forそれを使用してawkIDを取得します。それから2番目のファイルの関連レコードをgrepします。Bashでこれを行うより直接的な方法はありますか??私はbashがよくスマートで効果的な方法まだ慣れていないテキストファイルの操作。

答え1

接続とソート:

join -t , <(sort given.csv) <(sort family.csv)

出力:

123. ジョン・レノン
246. ポール・マッカートニー
369. ジョージ・ハリソン
987 火リンゴスター


grepを使用してください:

#!/bin/bash

F1="given.csv"
F2="family.csv"
D=","           # delimiter

while IFS="$D" read FIRST_COLUMN REST; do
  T="$FIRST_COLUMN$D$REST"
  T+="$(grep -oP "^$FIRST_COLUMN\K$D.*" "$F2")" && echo "$T"
done < "$F1"

出力:

123. ジョン・レノン
246. ポール・マッカートニー
369. ジョージ・ハリソン
987 火リンゴスター

関連情報