〜30個のファイルがあり、各個々のファイルには2つの列が含まれています。最初はID列、2番目は数値です。単純なコマンド接続ではなく、すべてのファイルを1つのファイルにマージしたいと思います。別個のファイルには、ID 1 列のすべての値とその列の各 ID に対応する値が必要です。両方のファイルにIDがない場合、スコアは0になることがあります。
列のID
項目数は同じではなく、ファイルごとに大きく異なります。
単一ファイルの例
- 10_S9.Count.Matrix
ID 10_S9 TRI_DN0_c0_g1 12717.85 TRI_DN100000_c0_g1 93.65 TRI_DN100001_c0_g1 110.58 TRI_DN100002_c0_g1 80.76 TRI_DN100003_c0_g1 386.84 TRI_DN100004_c0_g1 137.85 TRI_DN100005_c0_g1 52.14 TRI_DN100006_c0_g1 87.19 TRI_DN100009_c0_g1 27.88
- 11_S13.Count.Matrix
ID 11_S13 TRI_DN0_c0_g1 22358.82 TRI_DN0_c2_g1 164.98 TRI_DN100000_c0_g1 164.40 TRI_DN100001_c0_g1 140.92 TRI_DN100002_c0_g1 196.00 TRI_DN100003_c0_g1 46.94 TRI_DN100004_c0_g1 71.21 TRI_DN100005_c0_g1 106.48 TRI_DN100006_c0_g1 28.96
- 12_S17.Count.Matrix
ID 12_S17 TRI_DN0_c0_g1 11195.36 TRI_DN0_c1_g1 490.24 TRI_DN0_c2_g1 64.11 TRI_DN0_c3_g1 14459.43 TRI_DN0_c4_g1 4173.92 TRI_DN0_c5_g1 4015.54 TRI_DN1_c0_g1 194.56 TRI_DN1_c0_g1 26.99 TRI_DN1_c0_g1 1078.54
- 13_S21.Count.Matrix
ID 13_S21 TRI_DN0_c0_g1 40754.51 TRI_DN1_c0_g1 85.85 TRI_DN1_c0_g1 80.68 TRI_DN1_c0_g1 78.92 TRI_DN1_c0_g1 101.48 TRI_DN1_c0_g1 94.66 TRI_DN1_c0_g1 189.68 TRI_DN1_c0_g1 39.68 TRI_DN1_c0_g1 199.86
- 14_S26.Count.Matrix
ID 14_S26 TRI_DN0_c0_g1 35750.85 TRI_DN0_c0_g2 1521.63 TRI_DN0_c0_g3 8969.77 TRI_DN0_c1_g1 13918.85 TRI_DN0_c1_g2 797.95 TRI_DN0_c2_g1 83624.41 TRI_DN0_c3_g1 669.73 TRI_DN0_c4_g1 53.83 TRI_DN1_c0_g1 235.10
- 最終表は次のようになります。
ID 10_S9 11_S13 12_S17 13_S21 14_S26 TRI_DN0_c0_g1 334.30 678 98.0 56.0 98.0 * TRI_DN0_c1_g1 200.44 0 859.36 89.03 0 TRI_DN0_c2_g1 12.32 34 12.56 64.6 78.9 * TRI_DN100000_c0_g1 20.79 0 0 0 0 TRI_DN100001_c0_g1 24.18 34.3 12.56 64.6 78.9 TRI_DN100002_c0_g1 73.50 67.8 98.8 56.0 98.0 * TRI_DN100003_c0_g1 162.44 10.25 456.23 98.45 0 TRI_DN100004_c0_g1 55.98 3.34 6.78 98.0 1.5 TRI_DN100005_c0_g1 77.86 55.98 3.34 73.50 67.8
記号*
は、対応するIDが10_S9、12_S17、13_S21にのみ存在し、11_S13、14_S26には存在しないことを示し、与えられたスコアは0 "0"です。
このテーブル/行列を作成するのに役立ちます。
ベストアンサー1
"tcsh script.csh"を使用して実行できるtcshスクリプト
#script.csh
egrep -v '==>|ID' *.matrix | sort -k2,2 -k1,1 | sed -e's/\.counts.matrix:/ /g' | sort -k2,2 -u | awk '{printf(" %s 0.0\n",$2)}' > allIDs.txt
foreach xx ( ` ls -1d *.matrix ` )
set yy = ` echo $xx | sed -e's/matrix/matrix.tmp/g' `
cat $xx allIDs.txt | xargs -L1 | sort -k1,1 -k2,2gr | awk 'BEGIN {last="xxx"} { if ( $1 != last ) printf(" %s\n",$0) ; last=$1}' > $yy
end
( echo ' ID '; ls -1d *.counts.matrix.tmp | sed -e's/.counts.matrix.tmp//g' | sort -k1,1 ) | xargs | sed -e's/ / /g' -e's/ID / ID /g' > table.txt
egrep -v '==>|ID' *.matrix.tmp | sort -k2,2 -k1,1 -k3,3gr | sed -e's/.counts.matrix.tmp//g' | awk 'BEGIN {last="xxx"} { if ($2!=last) { if (last != "xxx") printf("\n"); printf("%s ",$2);} printf("%s ",$3); last=$2} END{printf("\n")}' >> table.txt
unset xx yy
出力は "table.txt"ファイルに保存されますが、形式が正しくありません。複数の値のうち最大値のみを書き込みます。また、中間ファイルとしてジャンク ".matrix.tmp"ファイルを生成します。クイックスクリプトで作業を実行できますが、最高ではありません。
また、ファイル名が出力ファイルの列ヘッダーと一致すると仮定します。