美好的一天
我有以下数据矩阵
1 1 0 0 1
2 0 0 1 1
1 1 0 0 1
2 1 2 2 0
我想根据以下条件加倍列
Condition 1 if $i == 0, replace with 1 1 (i.e. in 2 columns)
Condition 2 if $i == 1, replace with 1 2
Condition 3 if $i == 2, replace with 2 2
因此该示例的预期输出将是
1 2 1 2 1 1 1 1 1 2
2 2 1 1 1 1 1 2 1 2
1 2 1 2 1 1 1 1 1 2
2 2 1 2 2 2 2 2 1 1
我通常使用R和Octave矩阵但是当前矩阵在安静的大片中经过一段时间R内存并且需要很长时间。
答案 0 :(得分:2)
awk 'BEGIN {
map[0] = "1 1"; map[1] = "1 2"; map[2] = "2 2"
}
{
for (i = 1; i <= NF; i++)
printf "%s", (map[$i] (i < NF ? FS : RS))
}' infile
答案 1 :(得分:1)
如果数据矩阵只包含0,1或2,则可以使用简单的截断技巧:
awk '{
for (i=1;i<=NF;i++)
printf "%d %d ", 1+ $i/2, 1+ ($i+1)/2
}' file && echo