我无法将大型2D矩阵格式化为“稀疏矩阵”格式。我希望这里有人可以提供帮助。
由于文件较大,应首选 awk 脚本。
以下是数据中的假设集(制表符分隔):
Regions string8-0 string8-5000 string8-10000
string8-0 0 2.1 1.15
string8-5000 0 0 2.4
string8-10000 0 4 3.1
因此,结果输出应该是一个包含四列的制表符分隔文件。 Column1 = rownames的数字部分(colomn1来自数据;例如:0,5000,1000); Column2 =是组合名称的相应数字部分(例如:0,5000,10000), Column3 =两个bin之间的值。 Column4 =列名称的字符串部分(string8,string8,string8)。
如果相应的值不为零,则仅打印此内容。
像这样:0 5000 2.1 string8
0 10000 1.15 string8
5000 10000 2.4 string8
10000 5000 4 string8
10000 10000 3.1 string8
很抱歉,如果这是一个多余的问题,但我找不到任何解决方案。
谢谢, 的Laszlo
答案 0 :(得分:0)
编辑:现在为输入行中的多个“点击”输出单独的行
$ cat sp.awk
BEGIN { FS = OFS = "\t" }
NR == 1 {
for (c=2; c<=NF; ++c) {
split($c, col_parts, "-")
col_str[c] = col_parts[1]
col_num[c] = col_parts[2]
}
next
}
{
split($1, parts, "-");
col1 = parts[2]
for (c=2; c<=NF; ++c) {
if ($c != 0) {
print col1, col_num[c], $c, col_str[c]
}
}
}
$ awk -f sp.awk sp.txt
0 5000 2.1 string8
0 10000 1.15 string8
5000 10000 2.4 string8
10000 5000 4 string8
10000 10000 3.1 string8