2012-03-20 60 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

相關問題