我有具有以下結構的結合線與匹配的密鑰
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.的第一和第二次測量a
,b
,c
和d
使用4個略有不同的算法來衡量其真正價值在於在列中的值true
我想這樣做是創建3個新文本文件,比較J1
與J2
,S1
與S2
和J1
與S1
的結果。例如輸出J1
J2
VS:
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
爲J1
測量a
等
另一個例子是用於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
我不確定如何重新排列此數據以獲得所需的結構。我嘗試在foreach
環路中添加額外的管道awk
awk 'BEGIN {RS="\n\n"} {print $1, $3,$10,$4,$11,$5,$12,$6,$13,$7}'
任何想法?我確信使用awk
可以以不那麼麻煩的方式完成,儘管使用適當的腳本語言可能會更好。
在你的第二個代碼塊中,你打算讓'82.1'只出現一次嗎?對不起,重新閱讀這個問題,發現它是'真正'的價值。 – icedwater
另外,你爲什麼需要兩次J1和J2? – icedwater
icedwater指的是說你想得到'J1對J2,S1對S2和J1對J2'結果的部分。 – TLP