2011-04-01 52 views
0

我有它的头两行是这样的文件:如何AWK将文件转换为LIBSVM格式?

"price" "spec.long" "spec.short" "com.long" "com.short" "small.long" "small.short" 
"1" 10.8 10270 -4069 57894 -76045 58818 -46868 

我想消除第一行,消除引号内的整列,消除了报价,并有结果显示如下:

10.8 1:10270 2:-4069 3:57894 4:-76045 5:58818 6:-46868 

我在考虑是否值得学习awk来完成像这样的任务和类似的任务。或者,如果我的时间更好地用在Perl,Ruby或Python解决这个。

回答

1

最简单的方法来摆脱第一线的只是用grep显示它。然后其余的可以被硬编码,假设整个文件看起来像这样。

grep -v price file | awk '{print $2 " 1:" $3 " 2:" $4 " 3:" $5 "4:" $6 " 5:" $7 " 6:" $8}'

+0

那就得了。我在学习awk。 (和grep)。谢谢。 – Milktrader 2011-04-01 16:19:09

+0

非常推荐。即使只是AWK我知道(主要是在这里展出)的点点是无休止有益的,因为有其他的shell工具集。 – drysdam 2011-04-01 16:21:39

3

无需硬编码索引:

awk 'NR>1 { 
    printf("%s ",$2) 
    for (i=3; i<=NF; i++) printf("%d:%s ", i-2, $i) 
    print "" 
}' filename 
+0

欣赏广义版本。谢谢。 – Milktrader 2011-04-01 19:40:39

相关问题