我正在寻找一种方法来生成我的模型预测的一些统计数据。 在左边我有真正的价值观,在右边我有预测。 我的真实值超过了一个区间,因此我想将它们压缩为每个区间的单个值,并知道进行了哪些预测。 我想我需要做像" uniq"到第一列并迭代第二列的每一行,直到值在第一列中更改。 我认为awk会非常擅长使用$ 1和$ 2来处理列,但第二列的迭代不会丢失第一列中的信息就是我被困住的地方。值得注意的是,第一列中的值可以多次出现,我希望它们在每个间隔中重复,而不是按顺序重复。 我可以接受shell或python中的任何代码。
示例输入:
1 1
1 0
1 1
2 2
2 2
1 1
3 3
3 3
3 2
3 3
2 3
2 2
2 1
示例输出:
1 1 0 1
2 2 2
1 1
3 3 3 2 3
2 3 2 1
答案 0 :(得分:1)
使用awk
非常简单:
awk 'NR>1{cr="\n"}L!=$1{printf "%s%s ",cr,$1;L=$1}{printf " %s" ,$2}END{print ""}' input
<强>结果强>
1 1 0 1
2 2 2
1 1
3 3 3 2 3
2 3 2 1
<强>解释强>
NR>1{cr="\n"}
:cr
或回车:将 null ,直到处理完第一条记录(NR>1
)。< / p>
L!=$1{printf "%s%s ",cr,$1;L=$1}
:如果L
上一个键与当前($1
)不同,则会打印 cr (首先为空记录)当前密钥$1
,并将其值存储在L
中作为最后一个密钥处理。
{printf " %s" ,$2}
:只需显示每条记录的第二列。
END{print ""}
:处理完所有记录后,打印最终回车。
答案 1 :(得分:1)
这是bash中的一个版本:
#/bin/bash
while read a b; do
if [ $a != "$val" ]; then
[ -n "$val" ] && echo $val $pred
val=$a
pred=$b
else
pred="$pred $b"
fi
done <inputfile
[ -n "$val" ] && echo $val $pred