awkでキー列を使用して2つのファイルをリンクする方法

awkでキー列を使用して2つのファイルをリンクする方法

2つのテーブルファイルがあり、次のように結合したいと思います。

ファイルA.out

Well    Sample Name Sample Color    
A1  B1000-1-KF  "RGB(132,193,241)"
A1  B1000-1-KF  "RGB(132,193,241)"      
A2  B500-3-KF   "RGB(168,255,222)"      
A2  B500-3-KF   "RGB(168,255,222)"

ファイルB.アウト

Well    Cycle   Target Name Rn  ΔRn
A1  1   Ngene   433375.375  -2322.9575
A1  2   Ngene   435992.3438 -1616.2767
A1  3   Ngene   438522  -996.9085
A1  4   Ngene   441353  -76.1964
A2  1   Ngene   541226.1875 13234.6875
A2  2   Ngene   514756.8125 -13234.6875
A2  3   Ngene   517349.2188 -10642.2812
A2  4   Ngene   521414.875  -6576.625

私はC.outが欲しい:

Well    Cycle   Target Name Rn  ΔRn Sample Name
A1  1   Ngene   433375.375  -2322.9575  B1000-1-KF
A1  2   Ngene   435992.3438 -1616.2767  B1000-1-KF
A1  3   Ngene   438522  -996.9085   B1000-1-KF
A1  4   Ngene   441353  -76.1964    B1000-1-KF
A2  1   Ngene   541226.1875 13234.6875  B500-3-KF
A2  2   Ngene   514756.8125 -13234.6875 B500-3-KF
A2  3   Ngene   517349.2188 -10642.2812 B500-3-KF
A2  4   Ngene   521414.875  -6576.625   B500-3-KF

したがって、各ファイルの最初の列がキーであり、B.outとA.outの両方を2番目の列に配置したいと思います。

これまで私は次のことをしました。

awk -F'\t' -vOFS="\t" 'NR==FNR{a[$1]=$1;next}{print $0,a[$2]} B.out A.out > C.out

しかし、うまくいきません。どんなアイデアがありますか?

ありがとう

答え1

努力する

awk -F'\t' -vOFS="\t" 'NR==FNR{a[$1]=$2;next}{print $0,a[$1]} ' A.out B.out

どこ

  • $1最初のファイルのキーと$2値です。
  • 2番目のファイルでは、キーから値を取得します。$1

これは私に与える

Well    Cycle   Target Name Rn  ΔRn Sample Name Sample Color
A1  1   Ngene   433375.375  -2322.9575  B1000-1-KF
A1  2   Ngene   435992.3438 -1616.2767  B1000-1-KF
A1  3   Ngene   438522  -996.9085   B1000-1-KF
A1  4   Ngene   441353  -76.1964    B1000-1-KF
A2  1   Ngene   541226.1875 13234.6875  B500-3-KF
A2  2   Ngene   514756.8125 -13234.6875 B500-3-KF
A2  3   Ngene   517349.2188 -10642.2812 B500-3-KF
A2  4   Ngene   521414.875  -6576.625   B500-3-KF

答え2

注文する

for i in A1 A2; do o=`awk -v  i="$i" '$1 == i {if(!seen[$2]++){print $2}}' f1`; awk -v i="$i" -v o="$o"  'BEGIN {print "Well    Cycle   Target Name Rn  ΔRn  Sample Name" } $1 == i {print $0,o}' f2; done

出力

Well    Cycle   Target Name Rn  ΔRn  Sample Name
A1  1   Ngene   433375.375  -2322.9575 B1000-1-KF
A1  2   Ngene   435992.3438 -1616.2767 B1000-1-KF
A1  3   Ngene   438522  -996.9085 B1000-1-KF
A1  4   Ngene   441353  -76.1964 B1000-1-KF
Well    Cycle   Target Name Rn  ΔRn  Sample Name
A2  1   Ngene   541226.1875 13234.6875 B500-3-KF
A2  2   Ngene   514756.8125 -13234.6875 B500-3-KF
A2  3   Ngene   517349.2188 -10642.2812 B500-3-KF
A2  4   Ngene   521414.875  -6576.6 B500-3-KF

関連情報