使用AWK合并基于第一列的唯一行

时间:2019-06-22 14:30:31

标签: bash unix awk sed text-processing

我正在尝试编写AWK脚本以汇总大文本文件上的数据。结果数据的顺序很重要,因此我不能使用sort。

我尝试了FNR == NR的不同变体,但没有任何运气

输入文件

Height 3.5
Weight 12.3
Age 23
: 
:
Height 4.5
Weight 15.5
Age 31
:
:

预期产量

Height 3.5 4.5
Weight 12.3 15.5
Age 23 31

3 个答案:

答案 0 :(得分:1)

使用awk:

awk '{a[$1]=a[$1] FS $2} END{for(i in a) print i a[i]}' file

输出:

Weight 12.3 15.5
Height 3.5 4.5
:     
Age 23 31

源自:how to merge rows that share unique IDs into a comma separated table


请参阅:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

答案 1 :(得分:0)

使用awk's array可以将值分组。

这是简化版:。

BEGIN {
summary["Weight"] = "Weight";
...
}
{
summary[$1] = summary [$1] " " $2
}
END {
print summary["Weight"];
...
}

答案 2 :(得分:0)

这不是awk,但可能对您有用(GNU sed):

sed -E 'H;g;s/((\n\S+)[^\n]*)(.*)\2(.*)/\1\4\3/;h;$!d;x;s/.//' file 

使用保留空间收集每个键的结果,并在文件末尾,删除引入的换行符并打印结果。