あるファイルのトークンを別のファイルのデータに置き換えるには?

あるファイルのトークンを別のファイルのデータに置き換えるには?

私はbashシェルでAmazon Linuxを使用しています。各行には、以下のようなコンマ区切りのデータを含むファイルがあります。

2049,576804C7DF554416A9EA25B2A5A81514,X,

次に、各行が以下のように見えるコンマ区切りのデータを含む2番目のファイルがあります。

id,user_name,user_email

2番目のファイルの各行は一意です。私の質問は、最初のファイルの各行を取得し、2番目のトークンを2番目のファイルの一致するデータに置き換える方法です(最初のファイルの2番目のトークンを2番目のファイルの最初のトークンと比較して比較)。たとえば、私が上に挙げた幼稚権は次のとおりです。

2049,576804C7DF554416A9EA25B2A5A81514,username1,email1,X,

「576804C7DF554416A9EA25B2A5A81514」が2番目のファイルにある可能性があるとします。

答え1

以下のスクリプトのように使用してください。gawk

#!/bin/bash
gawk -F, 'tbl[$1]!=""{$2=tbl[$1];OFS=",";print;next}{tbl[$1]=$2;}' $1 $2

まず、トークンファイルと一緒に2つのファイルを渡します。これは、最初のファイルに重複エントリがないと仮定し、2番目のファイルに最初のファイルの最初のフィールドと一致しない追加の行がある場合、その行は出力から省略されます。

プログラムgawkは、最初のファイルから最初のフィールドにインデックス付きの連想配列を作成し、それを使用して2番目のファイルのtbl2番目のフィールドを置き換えてから、置換項目を含む行を印刷し、フィールド区切り記号として「、」を使用します。man gawk詳細は参照してください。

関連情報