次の構造のテキストファイルがあります
ID,operator,a,b,c,d,true
WCBP12236,J1,75.7,80.6,65.9,83.2,82.1
WCBP12236,J2,76.3,79.6,61.7,81.9,82.1
WCBP12236,S1,77.2,81.5,69.4,84.1,82.1
WCBP12236,S2,68.0,68.0,53.2,68.5,82.1
WCBP12234,J1,63.7,67.7,72.2,71.6,75.3
WCBP12234,J2,68.6,68.4,41.4,68.9,75.3
WCBP12234,S1,81.8,82.7,67.0,87.5,75.3
WCBP12234,S2,66.6,67.9,53.0,70.7,75.3
WCBP12238,J1,78.6,79.0,56.2,82.1,84.1
WCBP12239,J2,66.6,72.9,79.5,76.6,82.1
WCBP12239,S1,86.6,87.8,23.0,23.0,82.1
WCBP12239,S2,86.0,86.9,62.3,89.7,82.1
WCBP12239,J1,70.9,71.3,66.0,73.7,82.1
WCBP12238,J2,75.1,75.2,54.3,76.4,84.1
WCBP12238,S1,65.9,66.0,40.2,66.5,84.1
WCBP12238,S2,72.7,73.2,52.6,73.9,84.1
それぞれID
が、オペレーターによって数回分析されるデータセットに対応します。つまりJ1
、 とJ2
は、演算子 J による 1 回目と 2 回目の試行です。測定a
、b
、c
およびは、d
わずかに異なる 4 つのアルゴリズムを使用して、真の値が列にある値を測定します。true
私がやりたいことは、J1
vs J2
、S1
vs S2
、およびJ1
vsの結果を比較する 3 つの新しいテキスト ファイルを作成することS1
です。J1
vsの出力例J2
:
ID,operator,a1,a2,b1,b2,c1,c2,d1,d2,true
WCBP12236,75.7,76.3,80.6,79.6,65.9,61.7,83.2,81.9,82.1
WCBP12234,63.7,68.6,67.7,68.4,72.2,41.4,71.6,68.9,75.3
などのa1
測定値a
はどこですか。J1
S1
vsの別の例S2
:
ID,operator,a1,a2,b1,b2,c1,c2,d1,d2,true
WCBP12236,77.2,68.0,81.5,68.0,69.4,53.2,84.1,68.5,82.1
WCBP12234,81.8,66.6,82.7,67.9,67.0,53,87.5,70.7,75.3
ID は英数字順ではなく、同じ ID に対してオペレーターがクラスター化されることもありません。Linux ツールまたは perl/python などのスクリプト言語を使用して、このタスクにどのようにアプローチするのが最善かはわかりません。
Linux を使用した最初の試みは、すぐにレンガの壁にぶつかりました
最初にすべての一意の ID を検索します (並べ替え済み)
awk -F, '/^WCBP/ {print $1}' file | uniq | sort -k 1.5n > unique_ids
これらの ID をループして、 , を並べ替えJ1
ますJ2
。
foreach i (`more unique_ids`)
grep $i test.txt | egrep 'J[1-2]' | sort -t',' -k2
end
これにより、ソートされたデータが得られます
WCBP12234,J1,63.7,67.7,72.2,71.6,75.3
WCBP12234,J2,68.6,68.4,41.4,68.9,80.4
WCBP12236,J1,75.7,80.6,65.9,83.2,82.1
WCBP12236,J2,76.3,79.6,61.7,81.9,82.1
WCBP12238,J1,78.6,79.0,56.2,82.1,82.1
WCBP12238,J2,75.1,75.2,54.3,76.4,82.1
WCBP12239,J1,70.9,71.3,66.0,73.7,75.3
WCBP12239,J2,66.6,72.9,79.5,76.6,75.3
このデータを再配置して目的の構造を取得する方法がわかりません。ループ内に追加のパイプを追加してみawk
ましたforeach
awk 'BEGIN {RS="\n\n"} {print $1, $3,$10,$4,$11,$5,$12,$6,$13,$7}'
何か案は?awk
適切なスクリプト言語を使用したほうがよいかもしれませんが、これはを使用してより簡単な方法で実行できると確信しています。