Bash 使用AWK基于列1合并唯一行

Bash 使用AWK基于列1合并唯一行,bash,unix,awk,sed,text-processing,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 使用可以对值进行分组 这是一个简化版本: BEGIN { summary["Weight"] = "W

我正试图编写一个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
使用可以对值进行分组

这是一个简化版本:

BEGIN {
summary["Weight"] = "Weight";
...
}
{
summary[$1] = summary [$1] " " $2
}
END {
print summary["Weight"];
...
}
使用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 重量12.3 15.5 高度3.54.5 : 23岁31岁 源自:



请参阅:

这不是awk,但可能适合您(GNU-sed):


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

请提供智能、优雅和简洁的尝试。我喜欢。
sed -E 'H;g;s/((\n\S+)[^\n]*)(.*)\2(.*)/\1\4\3/;h;$!d;x;s/.//' file