私は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番目のファイルのtbl
2番目のフィールドを置き換えてから、置換項目を含む行を印刷し、フィールド区切り記号として「、」を使用します。man gawk
詳細は参照してください。