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
ツールを使用して結合された出力ファイルをインポートする方法(順序は重要ではありません):grep
bash
123,John,Lennon
246,Paul,McCartney
369,George,Harrison
987,Ringo,Starr
最初のファイルでループを実行し、for
それを使用してawk
IDを取得します。それから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 火リンゴスター