我有一个包含以下行的文件:
1 24 4
1 2 3
1 5 9
2 1 8
2 3 4
我想使用shell脚本按行中的第一个元素对这些行进行分组。例如,我们有3行第一个元素' 1'然后我想放第二个元素,即" 24,2 5"与同一行中的第一个元素一起,分组结果为:
1 24 2 5
2 1 3
如何使用shell脚本执行此操作?谢谢!
答案 0 :(得分:0)
使用awk:
awk '!a[$1]{b[++p]=$1; a[$1]=$2;next} {a[$1]=sprintf("%s%s%s", a[$1], OFS, $2)}
END {for (i=1; i<=p; i++) print b[i], a[b[i]]}' file
1 24 2 5
2 1 3
答案 1 :(得分:0)
如果您的输入是根据第一列进行排序的,那么您可以打印第1列填充第2列,因为它们会发生变化。类似的东西:
awk '
$1!=fld1 && NR>1{
print fld1, fld2
fld1 = $1; fld2 = $2
next
}
{
fld1 = $1;
fld2 = ((fld2) ? fld2 FS $2 : $2)
}
END{print fld1, fld2}' file
1 24 2 5
2 1 3
如果您的输入是随机的,那么最好将值存储在数组中。
awk '{a[$1] = ((a[$1]) ? a[$1] FS $2 : $2)}
END{for(x in a) print x,a[x]}' file
1 24 2 5
2 1 3