libSVM自动贴标签脚本

时间:2010-01-01 00:08:28

标签: sed awk libsvm

是否有任何脚本可以将制表符分隔的数据文件转换为libSVM数据格式?例如,我的未标记数据:

-1 9.45 1.44 8.90 
-1 8.12 7.11 8.90
-1 8.11 6.12 8.78

我希望用标签附加每个值:

-1 1:9.45 2:1.44 3:8.90 
-1 1:8.12 2:7.11 3:8.90
-1 1:8.11 2:6.12 3:8.78

我相信这可以使用sed或awk完成,但我不知道如何做到这一点。

谢谢!

3 个答案:

答案 0 :(得分:3)

尝试一下:

awk '{out=$1; for (i=2; i<=NF; i++) {out=out"\t"i-1":"$i} {print out}}' inputfile

答案 1 :(得分:2)

$ awk -F'\t' '{for(i=2;i<=NF;i++){$i=i-1":"$i;} }1' OFS='\t' file
-1 1:9.45 2:1.44 3:8.90
-1 1:8.12 2:7.11 3:8.90
-1 1:8.11 2:6.12 3:8.78

答案 2 :(得分:1)

你可以使用Ruby:

labels = File.open('labels.txt','r').map{|line| line.split}.flatten
data = File.open('data.txt','r').map{|line| line.split}.flatten.drop(1)
puts labels.zip(data).map{|pair| pair.join(':')}.join(' ')