2012-03-20 72 views
0

我想找到一个文本处理实用程序,该实用程序可将同一主键的所有属性值分组。环境是Linux。根据组密钥对文本数据进行分组的命令行工具

考虑一个由“记录”组成的文本文件,每个记录都是文件中的一行。这些记录是以空格分隔的数值序列,其中一个是主键值,另一些是主键的附加属性或为此主键计算的属性。例如:

PKEY PKEY-PROP1 PKEY-PROP2 attR1位attR2位attr3 attr4
100 200 400 0.1 0.2 0.3 0.4
100 200 400 0.2 0.7 0.4 0.5
100 200 400 0.3 0.4 0.5 0.6
101 200 401 0.7 0.8 0.9 1.0
101 200 401 0.8 0.9 1.0 1.1
101 200 401 0.9 1.7 1.1 1.2

通过指定哪列起到0123的作用,propertyattribute,我想从属于同一个主键的所有记录中获得某个属性的分组。例如,对于pkey=$1property=$2 $3attribute=$5,结果将是:

100 200 400 0.2 0.7 0.4
101 200 401 0.8 0.9 1.7

即,从所有行与pkey=100属性是分组为一行,从pkey=101的所有行中将它们分组到另一行中。

我不希望有一个确切的工具,但我会很高兴有一个工具,至少分组。

+1

看起来像'awk'工作。 – 2012-03-20 19:00:06

+0

是的,awk,假设它可用。添加标签以表明您是否在Linux/Unix上?祝你好运 – shellter 2012-03-21 04:03:10

+0

是的,环境是Linux,'awk'可用。但是'awk'的工作方式就像是一行一行,而任务是多行一行。你如何认为可以在'awk'中进行分组? – mbaitoff 2012-03-21 05:15:27

回答

2
awk ' 
x==$1 && y==$2 && z==$3 { 
    printf(" %s", $5) 
    next 
} 

{ 
    x=$1 
    y=$2 
    z=$3 
    printf("%s%s %s %s %s", NR==1?"":"\n", x,y,z,$5) 
} 

END{ 
    print "" 
}' input.txt 

100 200 400 0.2 0.7 0.4 
101 200 401 0.8 0.9 1.7 
+0

避免无用的猫:http://partmaps.org/era/unix/award.html – tripleee 2012-03-21 07:03:18

相关问题