回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个具有以下结构的文本文件</p>
<pre><code>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
</code></pre>
<p>每个<code>ID</code>对应一个数据集,该数据集由一个运算符分析多次。i、 e<code>J1</code>和<code>J2</code>是运算符J的第一次和第二次尝试。度量<code>a</code>、<code>b</code>、<code>c</code>和{<cd7>}使用4种稍有不同的算法来测量一个值,该值的真值位于<code>true</code>列中</p>
<p>我想做的是创建3个新的文本文件,比较<code>J1</code>vs<code>J2</code>,<code>S1</code>vs<code>S2</code>和{<cd2>}vs<code>S1</code>的结果。<code>J1</code>vs<code>J2</code>的示例输出:</p>
^{pr2}$
<p>其中<code>a1</code>是<code>J1</code>等的测量<code>a</code></p>
<p>另一个例子是<code>S1</code>vs<code>S2</code>:</p>
<pre><code>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
</code></pre>
<p>ID将不会按字母数字顺序排列,也不会为同一个ID聚集运算符。我不确定如何最好地处理此任务—使用linux工具或perl/python之类的脚本语言。在</p>
<p>我最初使用linux的尝试很快就遇到了困难</p>
<p>首先查找所有唯一ID(排序)</p>
<pre><code>awk -F, '/^WCBP/ {print $1}' file | uniq | sort -k 1.5n > unique_ids
</code></pre>
<p>循环这些ID并排序<code>J1</code>,<code>J2</code>:</p>
<pre><code>foreach i (`more unique_ids`)
grep $i test.txt | egrep 'J[1-2]' | sort -t',' -k2
end
</code></pre>
<p>给我分类的数据</p>
<pre><code>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
</code></pre>
<p>我不知道如何重新排列这些数据以获得所需的结构。我尝试在<code>foreach</code>循环<code>awk 'BEGIN {RS="\n\n"} {print $1, $3,$10,$4,$11,$5,$12,$6,$13,$7}'</code>中的<code>awk</code>添加一个额外的管道</p>
<p>有什么想法吗?我确信使用<code>awk</code>可以以一种不那么麻烦的方式完成,尽管使用适当的脚本语言可能会更好。在</p>